没有得到预期的输出
我正在写作业作业,要求用户阅读包含未知数量的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;
}
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)
{
...
这确保了ssn
和grade
执行循环时,已经从文件中读取身体。在totalGrades
的
2.计算有错误的顺序操作数:
grade += totalGrades;
需求是
totalGrades += grade;
3.You已宣布avgScore
为双,但
avgScore = totalGrades/count;
做整数算术,所以你永远不会得到浮点结果。你需要转换至少一个操作数增加一倍:
avgScore = totalGrades/(double) count;
4.什么是人仍下落不明是的SSN
处理您需要从文件级一起读它,然后在您分配maxScore
值的同一地点将其分配给maxSSN
。
请不要告诉初学者循环'eof()'。 [这是一个不好的做法](http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong)。 – Blastfurnace 2013-03-27 19:42:13
我没有,从它的问题;) – 2013-03-27 19:43:29
如何告诉他做'while(infile >> grade){}'而不是? – Blastfurnace 2013-03-27 19:44:15
您不读文件,因此不采取grade
作为输入。
'totalGrades'在“文件读取”循环中永远不会被修改。 – DCoder 2013-03-27 19:27:49
你永远不会读取文件。这真的是你的代码,因为它看起来像它永远不会完成...? – RichieHindle 2013-03-27 19:28:05
含糊不清的标题不可能对未来的访问者有用。太本地化了。 – 2013-03-27 20:00:52