2013-03-27 138 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作为输入

相关问题