2016-04-15 100 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