2017-04-22 25 views
0

テキストファイルからデータを読み込もうとしていますが、出力が非常に奇妙です。私は多くの研究をしてきました。私がここで間違っていることはあまりにも明白ではありません。ファイルからC++が文字列を読み込むと "-9.25596e + 61"が返されます

これは私がから読み取るしようとしているファイルです。

Duck, Daffy 
77.3 
Pluto 
88.0 
Duck, Donald 
94.3 
Mouse, Mickey 
80.0 
Mouse, Minnie 
94.3 

これは私の関数である:私はそれを実行してみたときに

int inputData(string names[], double averages[], int size) 
{ 
    ifstream inputFile; 

    inputFile.open("StudentData.txt"); 

    int count = 0; 

    for (int i = 0; i < size; i++) 
    { 

     if (i == 0 || i % 2 == 0) 
     { 
      string name; 
      inputFile >> name; 
      cout << name; 

      if (name.find(',')) 
      { 
       inputFile >> name; 
       cout << name; 
      } 
     } 
     else 
     { 
      inputFile.ignore(); 
      inputFile >> averages[i]; 
      cout << endl << averages[i] << endl; 
     } 


     count++; 

    } 

    inputFile.close(); 

    return count/2; 
} 

そして、ここは本当に奇妙出力されます。

Duck,Daffy 
77.3 
Pluto88.0 
-9.25596e+61 

-9.25596e+61 

-9.25596e+61 

-9.25596e+61 
+6

を、それはあなたが冥王星の名として88.0' '読んだことはかなり明らかです。 'string :: find'のドキュメンテーションを読み、それが何を返すかを見てください。 (ヒント:それは 'ブール'ではない) – molbdnilo

+0

@molbdniloあなたは信じられません。私はそれを 'if(name.find( '、')!= -1)'に変更し、今は動作します。私はそれを受け入れることができるように答えとしてあなたのコメントを提出しますか? – SpiroMarshes

+1

'if(i == 0 || i%2 == 0)' - テストは 'if(i%2 == 0)'と書くことができます。 – PaulMcKenzie

答えて

0

バグを引き起こさない1つのエラーは、最初にifはを確認する必要があります00 mod 2でもあるので、0 mod 2である。

あなたの不具合は、findを正しく使用していない第2のifにあります。

だから、あなたがより多くのような何かしたい:出力から

if (i % 2 == 0) 
    { 
     string name; 
     inputFile >> name; 
     cout << name; 

     if (name.find(',') != string::npos) 
     {  
      inputFile >> name; 
      cout << name; 
     } 
     // ... 
関連する問題