没有得到预期的输出

Not getting the expected output

本文关键字:输出      更新时间:2023-10-16

我正在写一份家庭作业,要求用户阅读一个文本文件,其中包含未知数量的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 filenn";
        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 << "nn";
    system("pause");
    return 0;
}

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

这确保在执行循环体时从文件中读取ssngrade

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

 grade += totalGrades;

必须是

 totalGrades += grade;

3。您已经将avgScore声明为double,但是

 avgScore = totalGrades / count;

执行整数运算,因此永远不会得到浮点数结果。您需要将至少一个操作数强制转换为double类型:

 avgScore = totalGrades / (double) count;

4。仍然缺少的是SSN

的处理。

您需要从文件中读取它和等级,然后在分配maxScore值的同一位置将其分配给maxSSN

不读取文件,因此不将grade作为输入