我正在编写一份家庭作业,要求用户阅读包含未知数量的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 :(得分:3)
1.您没有阅读inFile
中的任何内容。最有可能的是,您希望阅读成绩值:
while (!inFile.eof())
{
inFile >> grade;
...
根据@Blastfurnace的反馈,使用inFile.eof()
也是错误的。请考虑以下输入文件:
3
5
9
17
其中每一行都以lf
结尾。然后,循环将读取 5行,因为在读取值17
后它没有检测到文件结尾,但会尝试读取另一个值从文件。 1}}当循环终止时,count
将是5
,这是错误的。
请改用以下条件:
while (inFile >> grade)
{
...
要阅读ssn,请使用:
while (inFile >> ssn >> grade)
{
...
这确保在执行循环体时已从文件中读取ssn
和grade
。
2. totalGrades
的计算操作数的顺序错误:
grade += totalGrades;
需要
totalGrades += grade;
3.您已将avgScore
声明为双倍,但
avgScore = totalGrades / count;
进行整数运算,因此永远不会得到浮点结果。你需要将至少一个操作数转换为double:
avgScore = totalGrades / (double) count;
4.仍然缺少的是SSN的处理
您需要将其与文件中的成绩一起阅读,然后在指定maxSSN
值的同一位置将其分配到maxScore
。
答案 1 :(得分:0)
您未阅读该文件,因此未将grade
作为输入。