为啥while循环不退出?

Posted

技术标签:

【中文标题】为啥while循环不退出?【英文标题】: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”时退出,但它会创建一个换行符并且不输出任何内容。

【问题讨论】:

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

【讨论】:

以上是关于为啥while循环不退出?的主要内容,如果未能解决你的问题,请参考以下文章

没有退出“while”循环,但为啥呢?

当条件不满足时,while循环退出而不是循环

使用外部事件退出 while 循环

怎么跳出while循环

C语言 counter=counter+1 是啥意思,为啥后面要加1,去掉行吗?与while 有什关系?

掷骰子游戏做while循环不满足退出条件