我正在完成一项家庭作业,要求我为每个学生生成SSN和成绩,并计算最小,最大和平均分数,同时显示具有最高分数的学生的SSN。这一切都有效,除了我得到每个学生的min,max和avg的迭代而不是总数,我没有获得最高分学生的SSN。数据从文件中读入。
我需要输出看起来像:
123-45-6789 87
123-56-9872 91
等....
然后结束
最高分:91 SSN:123-45-6789
最低分数:23
平均得分:86
这是代码,任何帮助都会很棒。
#include <iostream>
#include <string>
#include <fstream> // for file I/O
#include <iomanip>
using namespace std;
int main ()
{
string ssn, maxSSN;
int grade = 0, totalGrades = 0, count = 0, maxScore = 0, minScore = 0;
double avgScore = 0;
ofstream printFile ("StudentGrades.txt");
if (!printFile)
{
cout << " Error opening printFile" << endl;
system ("pause");
return 100;
}
//ifstream studentFile ("lab5a.dat"); // alternative open
ifstream studentFile;
studentFile.open("c:\\lab5a.dat");
if (!studentFile)
{
cout << "Open error on lab5a.dat" << endl;
system ("pause");
return 101;
}
cout << " SSN Grade" << endl;
cout << "--------- -----" << endl;
while (!studentFile.eof())
{
studentFile >> ssn >> grade;
if (count == 0)
{
maxScore = grade;
minScore = grade;
}
else
{
if (grade > maxScore)
maxScore = grade;
if (grade < minScore)
minScore = grade;
}
totalGrades += grade ;
count++;
cout << ssn << setw(7) << grade << endl;
}
if (count)
avgScore = totalGrades / (double) count;
cout << "\n\n";
cout << "Maximum Score: " << maxScore << " Student SSN:" << maxSSN << endl;
cout << "Minimum Score: " << minScore << "\n";
cout << "Average Score: " << avgScore << "\n";
//studentFile >> ssn >> grade;
printFile << ssn;
if (grade >= 90)
printFile << " A" << endl;
else if (grade >= 80)
printFile << " B" << endl;
else if (grade >= 70)
printFile << " C" << endl;
else if (grade >= 60)
printFile << " D" << endl;
else
printFile << " F " << endl;
studentFile.close();
printFile.close();
system ("pause");
}
除了我没有让maxScore SSN出现之外,一切都好了吗?
答案 0 :(得分:2)
其中一个问题如下:
while (!studentFile.eof())
{
studentFile >> ssn >> grade; //put read records here
if (count == 0)
{
maxScore = grade;
minScore = grade;
}
else
{
if (grade > maxScore){
maxScore = grade;
maxSSN = ssn
}
if (grade < minScore)
minScore = grade;
}
totalGrades += grade ;
count++;
}//^^^^should end your while loop here, finish reading all then do average
//^^^^^now compute the averageScore
if (count)
avgScore = totalGrades / (double) count;
首先尝试清除逻辑,如果有的话,你会发现其他问题。 在while循环中,你不记得当前的最大SSN。
答案 1 :(得分:0)
您的输入循环仍然与先前版本的问题有关。循环eof()
是一种不好的做法,原因在另一个问题中解释:Why is iostream::eof inside a loop condition considered wrong?
尝试更改此内容:
while (!studentFile.eof())
{
studentFile >> ssn >> grade;
// ... the rest of your code
}
为:
while (studentFile >> ssn >> grade)
{
// ... the rest of your code
}