2013-10-08 6 views
0

J'ai un code pour comparer des ensembles de questions auxquelles différentes personnes répondent, l'une définit les entrées de l'utilisateur, l'autre provient d'un fichier .txt. Quand je l'exécute, il me donne un indice de vecteur d'erreur d'assertion hors de portée et je ne peux pas trouver d'où il vient. Voici le code:Vector Indice hors erreur erreur

void compare() 
{ 
    const int qnum = 11; 
    string filename, temp; 
    string search[10] = {"1","2","3","4","5","6","7","8","9","0"}; 
    int answers[qnum], i, j, k, q= 0, numtemp = 0, pplNum; 
    ifstream infile; 
    vector <string> people; 
    vector <int> pplans; 
    vector <int> pplscore; 

    cout << "Please enter the name of the file you would like to enter: "; 
    cin >> filename; 

    string infilename= filename; 
    infile.open(infilename.c_str()); 

    //Temporary test part of the program until we add the GUI just copy another person's answer or put similar ones 
    //for testing purposes 


    infile >> pplNum; 
    //allows for all names and scores to fit in each vector 
    for(i = 0; i < pplNum; i++) 
    { 
     people.push_back(""); 
     people.push_back(""); 
     pplscore.push_back(0); 
    } 
    //takes the person's name 
      for(j = 0; !infile.eof(); j+ 2) 
     { 
      infile >> people[j]; 
      infile >> people[j+1]; 
     } 

     for(i = 0; i < pplNum; i++) 
     { 
      //sets the numbers for the individual in question 
      for(k = 0; k < qnum; k++) 
      { 
       infile >> pplans[k]; 
       if(answers[k] == pplans[k] && k < 10) 
        numtemp++; 
       else if (k == 10 && answers[k] == pplans[k]) 
        if(answers[answers[k]] == pplans[pplans[k]]) 
         numtemp++; 
      } 
      pplscore.push_back(0); 
      pplscore[i] = numtemp; 

     } 
} 
+3

Je crois que vous vouliez écrire '+ = 2' ici:' for (j = 0;! Infile.eof() ; j + 2) ' –

+1

Que contient le fichier txt? – Beta

+0

exécutez votre programme avec un débogueur (par exemple 'gdb' si vous utilisez g ++), alors vous devriez voir à quel point dans le programme l'assertion apparaît – codeling

Répondre

0
vector <int> pplans; 
... 
infile >> pplNum; 
//allows for all names and scores to fit in each vector 
for(i = 0; i < pplNum; i++) 
{ 
    people.push_back(""); 
    people.push_back(""); 
    pplscore.push_back(0); 
} 
... 
for(i = 0; i < pplNum; i++) 
{ 
    //sets the numbers for the individual in question 
    for(k = 0; k < qnum; k++) 
    { 
    infile >> pplans[k]; 
    ... 
    } 
} 

Vous avez oublié de faire de la place dans pplans. (Et il est préférable d'utiliser push_back avec les données réelles, et ne pas compter sur le code comme ceci.)

+0

Donc je pourrais simplement utiliser: for (k = 0; k TPOT94

+0

@ user2750772: Non, 'pour (k = 0; k > n; pplans.push_back (n);} '. Ou 'int n; while (infile >> n) {pplans.push_back (n);} '. – Beta

Questions connexes