这是我的代码。目的是输入Vector of Student课程,包含姓名和家庭作业成绩。
istream& input(istream& is, student& s){
is.clear();
cout << "Enter student name: ";
getline(is,s.name);
grade(is,s.homework);
return is;
}
istream& grade(istream& is, vector<double>& homework){
if(is){
homework.clear();
double x;
cout << "Enter grade of student - Ctrl-Z to stop: ";
while(is>>x)
homework.push_back(x);
is.clear();
}
return is;
}
问题是第一个学生的名字没问题,但是当程序读取下一个学生的名字(键盘输入)时,它总是以替代(ASCII 26)字符开头。我猜这个问题来自输入流,当我使用CTRL-Z来表示作业成绩输入结束时。你们能提出解决方案吗?
答案 0 :(得分:1)
使用Ctrl-Z会将SUB字符插入流中。在该角色之前提取到双重停止。所以你可以通过使用istream :: ignore()方法来消除它。使用count为1并将delim参数设置为0x1A(SUB的值)。
is.ignore(1, 0x1A);
另一种可能性是不要指示用户键入Ctrl-Z,只需按ENTER键。