【发布时间】:2014-12-22 05:00:48
【问题描述】:
我正在阅读一个包含姓名和成绩的文本文件,格式如下:
Polly 95 99 95 94 93 98 99
Abraham 80 85 81 86 95 78 81
我使用以下代码将每个学生读入一个 Student_info 结构:
// read homework grades from an input stream into a vector<double>
istream& read_hw(istream& in, vector<double>& hw)
{
if (in)
{
// get rid of previous content
hw.clear();
// read hw grades
double grade;
while (in >> grade) hw.push_back(grade);
// clear the stream so that input will work for next student
in.clear();
}
return in;
}
istream& read(istream& in, Student_info& s)
{
// read and store the student's name, midterm, and final
in >> s.name >> s.midterm >> s.final;
//std::cout << "The name is " << s.name << std::endl;
read_hw(in, s.homework);
return in;
}
后来我打印了每个学生的姓名和总成绩,但是发生了一些奇怪的事情。而不是得到
Polly 96.6
Abraham 82.2
第一个(Polly)之后的每个名字都被部分切断:
Polly 96.6
raham 82.2
我认为这与清除流以准备下一个学生有关:
in.clear();
好像是把下一个学生名字的开头扔掉了,但是我不能只去掉这行,因为istream需要回到OK状态。
我怎样才能完成这项任务,但要确保我不会丢掉每个学生姓名的一部分? (我假设我事先可能不知道有多少家庭作业,所以我不能简单地阅读 6 个双打然后继续。)
【问题讨论】:
-
你的阅读循环在哪里?因为到目前为止,您使用我的阅读循环对我有用。