2017-10-24 35 views
-1

私はループを使ってテキストファイルを読み込もうとしています。しかし何らかの理由で、決して整数値が正しいとは思われません。私はいつもゴミ値で終わります。ここで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++; 
     } 
    } 

は、テキストファイルは次のようになります。あなたのif文に基づいて

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

とどのようなあなたの出力が見えますか? – inxoy

答えて

0

sexcharではなくchar*またはstd::stringとして宣言されているように、それが見えます。 file >> sexを使用すると、ファイルの次の文字を変数に読み込み、文字列や数字のように空白をスキップします。その結果、sexは名前の後に最初のスペースを取得し、ファイルの性別フィールドをdataに読み込み、データフィールドをscoreに読み込もうとします。

std::skipwsの値を使用すると、空白を読み飛ばすことができます。

while (!file.feof())Why is iostream::eof inside a loop condition considered wrong?を参照)も使用しないでください。

ので、コードは次のようになります。

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

ありがとうございました。あなたは1つの問題を解決しました。それは私の問題を引き起こしていたものではなかったことが分かります。とにかく、ありがとう。 – ryan

+0

@ryan問題は何ですか? – Barmar

関連する問題