【问题标题】:Why won't while loop exit?为什么while循环不退出?
【发布时间】:2019-10-02 06:09:37
【问题描述】:

我正在制作一个程序,该程序将用户的学生姓名和成绩收集到向量中,并使用这些向量来计算平均值。当用户键入“完成”时,while 循环应该中断并继续执行下一段代码。但是,我制作的 while 循环不会中断。有没有更有效的方法来做到这一点?

我尝试创建一个 bool,当 bool 为真时会中断但仍然无法正常工作。

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);
     }
}

while 循环应该在输入“done”时退出,但它会创建一个换行符并且不输出任何内容。

【问题讨论】:

  • 欢迎来到 StackOverflow。您是否尝试过使用调试器单步执行代码并检查变量以确切了解循环不退出的原因?使用调试器是任何程序员都必须具备的基本技能。 StackOverflow 不是调试服务。
  • name 变量是如何定义的?是std::string 吗?是char* 吗?您不能将字符串或 char* 与 !=== 进行比较。如果是std::string,则需要执行比较字符串函数(name.compare( "done")),如果是char*,则需要执行strcmp函数
  • 使用条件名称 == “完成”的循环内部中断
  • 您的代码无法编译,请提供minimal reproducible example
  • @SuperG280 实际上 std::string 提供了 == 的重载(等等)来比较 szring-objects 和 cstrings

标签: c++


【解决方案1】:

当您键入“完成”时,循环的其余部分仍会执行,因为您只是在开头进行检查。因此,它希望您接下来输入分数,然后退出。

一种可能的解决方案是在阅读 name 后立即插入 break-statement

if(name == "done") {
    break;
}

【讨论】:

    【解决方案2】:

    我认为您可以通过将 while(){} 替换为 do{ }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");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-04
      • 1970-01-01
      • 1970-01-01
      • 2015-08-15
      • 1970-01-01
      • 2012-11-03
      • 1970-01-01
      相关资源
      最近更新 更多