问题说明
基本上,在我的“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}}
答案 0 :(得分:1)
" Total"和#34; FinalGrade"列是空的,你无条件地尝试阅读它们。
当您尝试这样做时,输入将包含" ID"从下一行开始,因为它不是一个整数,导致为流设置failbit
标志,导致循环条件为假,循环结束。
一种可能的解决方案是将while行读入字符串,将该字符串放入std::istringstream
对象,并像现在一样读取非空列。然后尝试从输入字符串流中读取可能为空的列。
另一个解决方案,如果这些列假设为空,则只是不读它们。