2016-09-12 1 views
1

Fondamentalement, mon problème est que je suis en train de lire les données à partir d'un fichier txt qui est plein de chiffres et de commentaires et de stocker chaque ligne dans un vecteur de chaîne, mais ma fonction getline arrête la lecture au premier caractère d'espace blanc si un commentaire comme (* commentaire *) se décompose enC++: GetLine arrête la lecture au début des espaces

str[0] = "(*"; 
str[1] = "comment"; 
str[2] = "*)"; 

C'est ce que mon codeblock pour la fonction getline ressemble à:

int main() { 
string line; 
string fileName; 
cout << "Enter the name of the file to be read: "; 
cin >> fileName; 

ifstream inFile{fileName}; 

istream_iterator<string> infile_begin {inFile}; 
istream_iterator<string> eof{}; 
vector<string> data {infile_begin, eof}; 
while (getline(inFile, line)) 
{ 
    data.push_back(line); 
} 

Et c'est ce que. le fichier txt ressemble à:

101481 
10974 
1013 
(* comment *) 0 
28292 
35040 
35372 
0000 
7155 
7284 
96110 
26175 

Je ne peux pas comprendre pourquoi il ne lit pas la ligne.

Répondre

3

Ceci est pour la simple raison que votre code n'utilise pas std::getline pour lire le fichier d'entrée.

Si vous regardez votre code très attentivement, vous verrez que, avant même d'arriver à ce point, votre code construit un istream_iterator<string> sur le fichier, et en passant, et la désinence istream_iterator<string> valeur au constructeur de la vector , cela avale efficacement le fichier entier, un mot délimité par des espaces à la fois, dans le vecteur.

Et par le temps, les choses se déplacer à la boucle getline, tout le fichier a déjà été lu, et la boucle ne fait absolument rien. Votre getline ne fait vraiment rien, avec l'état actuel des choses. Débarrassez-vous de ce truc qui implique istream_iterator s, complètement, et laissez simplement getline faire le travail pour lequel il a été conçu.

+0

Wow. Merci beaucoup, il n'est pas étonnant que j'ai été rejeté - c'était l'exemple que mon instructeur nous a dit d'utiliser tout en nous disant d'utiliser getline. Assez nouveau en C++ donc je n'aurais jamais attrapé ça, haha. –