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;

}
4

2 回答 2

3

1.你没有读到任何东西inFile。最有可能的是,您想读取等级值:

 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)
{
   ...

这确保了在执行循环体时两者ssn都已grade从文件中读取。

2.计算的totalGrades操作数顺序错误:

 grade += totalGrades;

需要是

 totalGrades += grade;

3.你已经声明avgScore为double,但是

 avgScore = totalGrades / count;

进行整数运算,因此您永远不会得到浮点结果。您需要将至少一个操作数转换为加倍:

 avgScore = totalGrades / (double) count;

4.仍然缺少的是SSN的处理

您需要将其与文件中的成绩一起读取,然后将其分配到您分配值maxSSN的同一位置。maxScore

于 2013-03-27T19:27:07.437 回答
0

没有读取文件,因此没有将grade其作为输入

于 2013-03-27T19:29:12.593 回答