没有得到预期的输出

时间:2013-03-27 19:25:48

标签: c++

我正在编写一份家庭作业,要求用户阅读包含未知数量的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;

}

2 个答案:

答案 0 :(得分: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)
{
   ...

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

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

 grade += totalGrades;

需要

 totalGrades += grade;

3.您已将avgScore声明为双倍,但

 avgScore = totalGrades / count;

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

 avgScore = totalGrades / (double) count;

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

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

答案 1 :(得分:0)

未阅读该文件,因此未将grade作为输入