2017-04-22 133 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'的文档并查看它返回的内容。 (提示:这不是'bool'。) – molbdnilo

+0

@molbdnilo你真不可思议。我把它改成了'if(name.find(',')!= -1)',现在它可以工作。提交你的评论作为答案,我可以接受它吗? – SpiroMarshes

+1

'if(i == 0 || i%2 == 0)' - 测试可以简单地写成'if(i%2 == 0)' – PaulMcKenzie

回答

0

一个不会导致错误的错误是第一个if应该检查i0 mod 2因为00 mod 2也是。

你的bug在第二个if,它不正确使用find

所以,你要更多的东西一样:

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

     if (name.find(',') != string::npos) 
     {  
      inputFile >> name; 
      cout << name; 
     } 
     // ...