仅文件读取功能读取第一行然后退出

时间:2017-02-15 13:21:57

标签: c++ visual-studio fstream

问题说明

基本上,在我的“Roster.h”头文件中,我有一个来自学生类的“学生”对象数组(包括函数changeScore,SetID,setTotal,setLetterGrade)。在下面将附加的函数中,它只读取第一行数据,然后在while条件下退出。我一直在盯着这个问题好几个小时,可以使用第二(或第三)双眼睛。任何批评也是值得赞赏的,因为我知道我不是最有效的程序员。应该注意“m_studentnum”是在构造函数中初始化为0的私有数据。提前谢谢!

代码

 ID         CLA   OLA   Quiz   Homework   Exam   Bonus   Total   FinalGrade   
 c088801    10    15      4         15     56       5 
 c088802     9    12      2         11     46       2 
 c088803     8    10      3         12     50       1
 c088804     5     5      3         10     53       3
 c088805     3    11      1         10     45       0 
 c088806     8    14      2         11     40      -1  
 c088807     4    12      2         12     48      -2
 c088808    10    10      3         11     36       0
 c088809     8     8      3         11     39       0
 c088810     6     9      4          9     47       3
 c088811     8     7      3         13     41       3
 c088812     4    11      3         11     37       1

数据文件 - 注意我正在做一个getline来读取数据列的标题

{{1}}

1 个答案:

答案 0 :(得分:1)

" Total"和#34; FinalGrade"列是空的,你无条件地尝试阅读它们。

当您尝试这样做时,输入将包含" ID"从下一行开始,因为它不是一个整数,导致为流设置failbit标志,导致循环条件为假,循环结束。

一种可能的解决方案是将while行读入字符串,将该字符串放入std::istringstream对象,并像现在一样读取非空列。然后尝试从输入字符串流中读取可能为空的列。

另一个解决方案,如果这些列假设为空,则只是不读它们。