2013-03-27 132 views
0

我正在寫作業作業,要求用戶閱讀包含未知數量的SSN和成績的文本文件。然後程序需要計算最大值,最小值和平均值,然後輸出相關SSN以及最小值和平均值的最大值。沒有得到預期的輸出

它似乎運行正常,但輸出全部爲「0」。

任何幫助解決這個問題,非常感謝。

代碼:

#include <iostream> 
#include <fstream> 
#include <string> 
#include <iomanip> 


using namespace std; 

int main() 
{ 
    string ssn, maxSSN; 
    int grade = 0, totalGrades = 0, count = 0, maxScore = 0, minScore = 0; 
    double avgScore = 0; 

    ifstream inFile; 
    inFile.open("C:\\lab5a.txt"); 

    if(!inFile) 
    { 
     cout << "Error opening the requested file\n\n"; 
     system("pause"); 
     return 101; 
    } 



    while (!inFile.eof()) 
    { 
     if (count == 0) 
     { 
      maxScore = grade; 
      minScore = grade; 
     } 
     else 
     { 
      if (grade > maxScore) 
       maxScore = grade; 
      if (grade < minScore) 
       minScore = grade; 
     } 
      grade += totalGrades; 
      count++; 

    } 

    if (count) 
     avgScore = totalGrades/count; 

    cout << "Maximum Score: " << maxScore << "  Student SSN:" << maxSSN << "\n"; 
    cout << "Minimum Score: " << minScore << "\n"; 
    cout << "Average Score: " << avgScore << "\n"; 
    // studentFile >> ssn >> grade; 

    inFile.close(); 

    cout << "\n\n"; 
    system("pause"); 
    return 0; 

} 
+0

'totalGrades'在「文件讀取」循環中永遠不會被修改。 – DCoder 2013-03-27 19:27:49

+2

你永遠不會讀取文件。這真的是你的代碼,因爲它看起來像它永遠不會完成...? – RichieHindle 2013-03-27 19:28:05

+0

含糊不清的標題不可能對未來的訪問者有用。太本地化了。 – 2013-03-27 20:00:52

回答

3

1.You不從​​閱讀任何東西。最有可能的,你想讀的等級值:

while (!inFile.eof()) 
{ 
    inFile >> grade; 
    ... 

據@Blastfurnace反饋,使用inFile.eof()也是錯誤的。考慮以下輸入文件:

3 
5 
9 
17 

其中每行以lf結尾。然後,循環將讀取5號線,因爲它不檢測文件結束17已經讀出的值之後,但會嘗試從文件讀取另一個值。當循環終止時,count將是5,這是錯誤的。

使用以下條件來代替:

while (inFile >> grade) 
{ 
    ... 

還需要閱讀SSN,使用此:

while (inFile >> ssn >> grade) 
{ 
    ... 

這確保了ssngrade執行循環時,已經從文件中讀取身體。在totalGrades

2.計算有錯誤的順序操作數:

grade += totalGrades; 

需求是

totalGrades += grade; 

3.You已宣佈avgScore爲雙,但

avgScore = totalGrades/count; 

做整數算術,所以你永遠不會得到浮點結果。你需要轉換至少一個操作數增加一倍:

avgScore = totalGrades/(double) count; 

4.什麼是人仍下落不明是的SSN

處理您需要從文件級一起讀它,然後在您分配maxScore值的同一地點將其分配給maxSSN

+0

請不要告訴初學者循環'eof()'。 [這是一個不好的做法](http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong)。 – Blastfurnace 2013-03-27 19:42:13

+0

我沒有,從它的問題;) – 2013-03-27 19:43:29

+1

如何告訴他做'while(infile >> grade){}'而不是? – Blastfurnace 2013-03-27 19:44:15

0

不讀文件,因此不採取grade作爲輸入

相關問題