2016-04-15 101 views
1

我正在编写一个程序,该程序从多列数据组成的多行数据文本文件中读取,这4行代表多个学生在一个教室中进行的4个测试。C++中的奇怪编码错误

读完一行后,程序会计算出每个学生的平均值,然后给他们一个字母等级。我编码它这样做。 问题是,虽然平均值没有问题地计算,但第一个学生的信件成绩不会显示出来。我忽略了一个错误吗?

下面的代码:

#include <iostream> 
#include <fstream> 

using namespace std; 

int main() 
{ 
    ifstream calcGrades; 
    calcGrades.open ("grades.txt"); 

    int test1, test2, test3, test4; 
    int studentNum = 1; 


    while(calcGrades.good()) 
    { 
     calcGrades >> test1 >> test2 >> test3 >> test4; 
     int average = (test1 + test2 + test3 + test4)/4; 
     char letterGrade; 
     if(average<60) 
      letterGrade='F'; 
     if(average<=60 && average<70) 
      letterGrade='D'; 
     if(average>=70 && average<80) 
      letterGrade='C'; 
     if(average>=80 && average<90) 
      letterGrade='B'; 
     if(average>=90) 
      letterGrade='A'; 
     cout << "Student " << studentNum 
      << "'s average is " << average 
      << " they currently have a " << letterGrade 
      << "." << endl; 
     studentNum++; 
    } 

    return 0; 
} 

下面是它从读取文件的内容:

44 55 77 88 
79 88 100 99 
77 99 98 99 
100 88 89 100 
55 56 40 77 
100 100 99 95 
88 84 87 88 
96 97 99 100 
30 44 77 55 
79 77 88 0 
54 52 60 77 
88 77 88 77 
44 77 10 95 

感谢您给予任何帮助,我一直在苦苦思索这个和 我只是无法看到出了什么问题。

+1

参见http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong – user657267

+0

不知道是谁因缺乏代码不工作的信息而投票结束。观察到的输出清楚地提到,代码是MCVE,并提供了输入数据。相反,一旦说错字被解决,它应该被标记为错字和不可重现。 – WhozCraig

+0

“我编码这样做。” - 电脑完全**我们告诉他们要做的事情。如果观察到的结果不像预期的那样,我们没有告诉他们我们认为我们告诉他们什么,并且必须*检查我们的假设*。 ;-) – DevSolar

回答

0

正确的逻辑应该是:

if(average<60) 
letterGrade='F'; 
else if(average>=60 && average<70) 
//    ^^ 
letterGrade='D'; 
else if(average>=70 && average<80) 
letterGrade='C'; 
else if(average>=80 && average<90) 
letterGrade='B'; 
else if(average>=90) 
letterGrade='A'; 
+0

谢谢,这个作品... –

+0

@ VCP,任何想法如何改善声誉,以及这整个Stackoverflow的工作原理,我是新来的。 –

+0

@AtulAgarawal:[什么是声望](http://stackoverflow.com/help/whats-reputation)。其实,检查整个常见问题解答,它写得很好。 – DevSolar