C++的DO循环表现奇怪

3

首先,这是我的代码:

string text;
do {
   cout << "Enter text: ";
   ws(cin);
   getline(cin, text);
} while (!text.empty());
// do stuff

我希望我的代码能做什么?
- 检查用户输入是否为空;
如果用户输入为空,则返回到循环的开头,要求用户重新输入文本。
如果用户输入不为空,则跳出循环并继续运行程序。

我的代码现在在做什么?
- 当我输入文本时,循环从头开始,并且我必须重新输入文本。
- 当我没有输入任何内容而只是按下回车键时,我的程序将一直等待,我需要按Ctrl+C来退出。


2
请记住,这是一个do-while循环,而不是repeat-until循环。 - Angew is no longer proud of SO
你丢弃空格并且不检查流的状态。 - AndyG
你的意思是不是 while (text.empty()) - Soren
1
你调用 ws 函数会吃掉回车符,所以如果只是输入回车符,你永远无法结束 while 循环 -- 最好不要使用 ws 函数,而是在测试 while 循环前先去除 text 中的空格。 - Soren
1
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Stein
显示剩余6条评论
1个回答

3
这不是一个 repeat-until,而是一个 do-while 循环,使用:
string text;
do {
   cout << "Enter text: ";
   ws(cin);
   getline(cin, text);
} while (text.empty());
//      ^^

基本上,如果条件是 true,则会再次循环,否则会停止循环。在您的情况下,如果字符串不为空,则会进行循环,如果字符串为空,则会停止循环。


谢谢您的回答,但那解决了我的第二个问题。 现在我需要循环在用户输入为空时重新开始——例如用户直接输入“enter”。 - Amat Erasu
当文本为空或者只输入回车时。 - Amat Erasu
@AmatErasu 这就是上面的代码所做的。当用户输入为空时,它将重新启动循环。否则,用户如何在没有输入的情况下发送空文本而不按“回车”键呢? - Shoe
我尝试了这段代码,当我在键盘上只按下回车键时,程序既不会退出也不会重新加载循环。 - Amat Erasu
如果它不存在,你为什么认为它没有重新加载循环? - Lightness Races in Orbit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接