2016-09-12 6 views
1

Mein Problem ist, dass ich versuche, Daten aus einer TXT-Datei, die voll von Zahlen und Kommentare und in jeder Zeile in einem Zeichenfolge Vektor gespeichert lesen, aber meine Getline-Funktion nicht mehr lesen beim ersten Leerzeichen so ein Kommentar wie (* Kommentar *) wird aufgebrochen inC++: Getline stoppt beim Lesen von Whitespace

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

Dies ist, was mein Codeblock für die getline Funktion wie folgt aussieht:

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); 
} 

Und das ist, was die. txt-Datei sieht wie folgt aus:

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

Ich kann nicht herausfinden, warum es nicht die ganze Zeile liest.

Antwort

3

Dies ist aus dem einfachen Grund, dass Ihr Code std::getline nicht verwendet, um die Eingabedatei zu lesen.

Wenn Sie auf den Code schauen sehr genau, sehen Sie, dass, bevor Sie selbst zu diesem Punkt, baut Ihr Code eine istream_iterator<string> auf die Datei, und durch sie, und der Endung istream_iterator<string> Wert auf die vector ‚s Konstruktor Dies schluckt effektiv die gesamte Datei, jeweils ein Wort mit Leerzeichen, in den Vektor.

Und bis die Dinge um die getline Schleife herumkommen, wurde die gesamte Datei bereits gelesen, und die Schleife tut absolut nichts. Ihre getline tut nicht wirklich etwas mit dem aktuellen Stand der Dinge.

Holen Sie sich das Zeug, das istream_iterator s beinhaltet, vollständig, und lassen Sie einfach getline den Job ausführen, für den es bestimmt war.

+0

Wow. Vielen Dank, es ist kein Wunder, dass ich weggeworfen wurde - das war das Beispiel, das mir mein Ausbilder gesagt hat, während er uns auch befahl, getline zu benutzen. Ziemlich neu in C++, also hätte ich das nie verstanden, haha. –