2017-10-24 1 views
-1

Ich habe versucht, eine Textdatei mit einer Schleife zu lesen. Aber aus irgendeinem Grund scheint es nie die richtigen Werte zu erhalten. Ich habe immer Müllwerte.Kann nicht Daten aus Datei in C++

while(!file.eof()) // I've also tried other variations of this while loop, none of which worked either 
    { 
     // ifstream, string, char, string, int 
     file >> name >> sex >> data >> score; 
     std::cout << name << std::endl; 
     if (sex == 'F') 
     { 
      femaleAverage += score; 
      femaleCount++; 
     } 
     else 
     { 
      maleAverage += score; 
      maleCount++; 
     } 

     if (data.compare("CC")) 
     { 
      comAverage += score; 
      comCount++; 
     } 
     else 
     { 
      uniAverage += score; 
      uniCount++; 
     } 
    } 

Hier ist, was die Textdatei wie folgt aussieht:

Bailey   M CC 68 
Harrison   F CC 71 
Grant   M UN 75 
Peterson   F UN 69 
Hsu    M UN 79 
Bowles   M CC 75 
Anderson   F UN 64 
Nguyen   F CC 68 
Sharp   F CC 75 
Jones   M UN 75 
McMillan   F UN 80 
Gabriel   F UN 62 
+2

und was macht Ihr Ausgang aussehen? – inxoy

Antwort

0

Basierend auf Ihren if Aussagen, es sieht aus wie sex als char erklärt wird, statt char* oder std::string. Wenn Sie file >> sex verwenden, liest es das nächste Zeichen aus der Datei in die Variable , ohne Whitespace wie für Strings oder Zahlen zu überspringen. Als Ergebnis erhält sex das erste Leerzeichen nach dem Namen, dann liest es das Sexfeld der Datei in data und versucht, das Datenfeld in score zu lesen.

Sie können den Wert std::skipws verwenden, um Whitespace vor dem Lesen zu überspringen.

Sie sollten auch nicht while (!file.feof()) verwenden, siehe Why is iostream::eof inside a loop condition considered wrong?. So sollte der Code

wie folgt aussehen:

while (file >> name >> std::skipws >> sex >> data >> score) { 
    std::cout << name << std::endl; 
    if (sex == 'F') 
    { 
     femaleAverage += score; 
     femaleCount++; 
    } 
    else 
    { 
     maleAverage += score; 
     maleCount++; 
    } 

    if (data.compare("CC")) 
    { 
     comAverage += score; 
     comCount++; 
    } 
    else 
    { 
     uniAverage += score; 
     uniCount++; 
    } 
} 
+0

Danke Mann, du hast ein Problem gelöst. Es stellte sich heraus, dass das nicht mein Problem verursacht hat. Trotzdem, danke trotzdem. – ryan

+0

@ryan Was war das Problem? – Barmar

Verwandte Themen