【发布时间】:2013-04-17 11:01:45
【问题描述】:
我正在处理来自 Accelerated C++ 的问题 4-6。问题要求我重写Student_info结构、read()函数和grade()函数,以便立即计算最终成绩,然后将其作为唯一成绩存储在Student_info中。
以前,该程序的工作方式如下:
-
read()从输入流中读取数据并将数据存储到Student_info对象中 - 每个对象都添加到一个向量中
- 读取和添加每个对象后,将对向量中的每个
Student_info对象调用grade()
有了新的约束,我觉得我必须结合read() 和grade() 函数,所以不需要存储中间等级。问题是从流中读取时,我不知道我是否遇到了文件末尾,直到我这样做。执行此操作时,我尝试在文件数据末尾调用 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);
}
【问题讨论】:
-
请显示当前代码;它会比你的解释更容易理解。