我正在处理来自 Accelerated C++ 的问题 4-6。问题要求我重写Student_info
结构、read()
函数和grade()
函数,以便立即计算最终成绩,然后将其作为唯一成绩存储在Student_info
.
以前,该程序的工作方式如下:
read()
从输入流中读取数据并将数据存储到Student_info
对象中- 每个对象都被添加到一个向量中
- 一旦读取并添加了每个对象,就会在向量中的
grade()
每个对象上调用Student_info
有了新的约束,我觉得我必须结合read()
andgrade()
函数,所以没有必要存储中间等级。问题是从流中读取时,我不知道我是否遇到了文件末尾,直到我这样做。执行此操作时,我尝试在grade()
文件数据末尾调用该函数。
考虑到约束是读取然后立即处理数据,我没有看到解决方法。如何处理?
struct Student_info
{
std::string name;
double final_grade;
};
istream& read(istream& is, Student_info& s)
{
double midterm, final;
is >> s.name >> midterm >> final;
// Error, when EOF is read, grade() will process bad data
s.final_grade = grade(midterm, final);
return is;
}
void main()
{
vector<Student_info> students;
Student_info record;
while (read(cin, record))
students.push_back(record);
}