为什么while循环不退出?

时间:2019-10-02 06:09:37

标签: c++

我正在编写一个程序,将用户的学生姓名和成绩收集到矢量中,并使用这些矢量计算平均值。当用户键入“ 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循环应该退出,但是它将创建换行符,并且不输出任何内容。

2 个答案:

答案 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;
}