2017-04-26 2 views
0
while (!fin.eof()) 
{ 
    fin.getline(read, 49); subcnt++;  
    i_sequence = subcnt;     
    i_name = my_tok(read, "/");   
    i_price = atoi(my_tok(NULL, "/")); 
    i_quantity = atoi(my_tok(NULL, "/")); 

    if (subcnt <= 10) 
     loadlist[subcnt-1].setList(i_sequence, i_name, i_price, i_quantity); 
} 

my_tok est une fonction que j'ai fait pour utiliser au lieu de strtok. La classe loadlist contient des informations sur un élément.Pourquoi "getline" initialise-t-il l'information?

Je souhaite que cette fonction de chargement lise les informations ligne par ligne à partir d'un fichier "ItemList.txt" et enregistre les informations écrites dans la classe. La première boucle est implémentée comme je le souhaite, mais quand il s'agit de la boucle suivante et que fin.getline(read,49) est appelée, toutes les informations précédemment sauvegardées sont initialisées.

Je ne sais pas pourquoi les informations changent continuellement lorsque fin.getline est appelée.

Merci de votre aide.

+4

Ce que vous demandez n'est pas clair. Aussi, 'while (! Fin.eof())' est incorrect. – cdhowie

+1

Publiez le plus petit exemple de code que vous pouvez trouver pour compiler, exécuter et afficher le problème. –

Répondre

0

Essayez de changement de code qui ouvre le fichier et lit les lignes dans une boucle à quelque chose comme ceci:

#include <fstream> 
#include <iostream> 
#include <string> 

int main (int argc, char* argv[]) 
{ 
    std::string line; 
    std::ifstream fin("ItemList.txt"); 
    if (fin) 
    { 
     while (std::getline(fin, line)) 
     { 
      // add code here to process each line 
     } 

     fin.close(); 
    } 

    return 0; 
} 
0
i_name = my_tok(read, "/");   

La fonction my_tok renvoie un pointeur dans la mémoire tampon, non? Et vous avez enregistré ce pointeur dans i_name.

Eh bien, puisque vous avez enregistré un pointeur dans votre tampon, lorsque vous changez ce qu'il y a dans le tampon, vous changez les valeurs auxquelles le pointeur pointe. Vous devez faire une copie de la valeur que vous voulez enregistrer et utiliser un pointeur sur la copie.

En outre, comme d'autres l'ont souligné, votre utilisation de feof est incorrecte. Il ne peut pas prédire l'avenir.