我正在编写一个程序,将用户的学生姓名和成绩收集到矢量中,并使用这些矢量计算平均值。当用户键入“ done”时,while循环将中断并继续进行下一段代码。但是,我创建的while循环不会中断。有更有效的方法吗?
我尝试创建一个布尔值,当布尔值为true时该布尔值会中断,但仍然无法正常工作。
while (name != "done") {
cout << "Enter name and grade: ";
cin >> name;
if (!(cin >> score)) {
cin.clear;
cin.ignore(256, '\n');
cout << "Re-enter grade: ";
cin >> score;
}
else {
studentName.push_back(name);
studentScore.push_back(score);
}
}
当键入“ done”时,while循环应该退出,但是它将创建换行符,并且不输出任何内容。
答案 0 :(得分:1)
我认为您可以用do {} while()
替换while(){}来轻松解决问题因此您的代码成为
do{
cout << "Enter name and grade: ";
cin >> name;
if (!(cin >> score)) {
cin.clear;
cin.ignore(256, '\n');
cout << "Re-enter grade: ";
cin >> score;
}
else {
studentName.push_back(name);
studentScore.push_back(score);
}
}while (name != "done");
答案 1 :(得分:0)
当您键入“ done”时,循环的其余部分仍将执行,因为您只是在开始处进行检查。因此,它希望您接下来输入分数,然后再退出。
一种可能的解决方案是在读取break
后立即插入name
语句
if(name == "done") {
break;
}