C++ 为什么这个while循环没有以下面的代码结束?
抱歉,这段代码看起来很傻,但我只想了解逻辑 当用户输入C++ 为什么这个while循环没有以下面的代码结束?,c++,loops,while-loop,C++,Loops,While Loop,抱歉,这段代码看起来很傻,但我只想了解逻辑 当用户输入quit时,我试图结束程序 我写了name!=“退出”&&sname!=“quit”作为while条件,因此如果其中任何一个是quit,循环将结束(对吗?) 但是当我将quit写为name时,它仍然等待sname输入,如果我也为sname输入写quit,那么它最终会结束。但是,自从我用&&编写条件以来,当它第一次看到退出时,它不应该结束吗 此外,当我使用| |编写条件时,我得到了相同的输出。为什么会这样 int main()
quit
时,我试图结束程序
我写了name!=“退出”&&sname!=“quit”
作为while条件,因此如果其中任何一个是quit
,循环将结束(对吗?)
但是当我将quit
写为name
时,它仍然等待sname
输入,如果我也为sname
输入写quit,那么它最终会结束。但是,自从我用&&
编写条件以来,当它第一次看到退出时,它不应该结束吗
此外,当我使用| |
编写条件时,我得到了相同的输出。为什么会这样
int main()
{
string name="",sname="";
cout << "enter your name and surname \n";
cout << ">>name=";
getline(cin,name);
cout << ">>surname=";
getline(cin,sname);
while (name != "quit" && sname != "quit")
{
cout << ">>name=";
getline(cin,name);
cout << ">>surname=";
getline(cin,sname);
}
return 0;
}
好问题!这与循环如何工作有关
在C++中,<<代码> 循环工作如下:
- 首先,它检查
while
循环中括号语句中的条件是否为true
- 如果是这样,它在执行
循环的同时执行的整个循环体,然后跳回到第一步
换句话说,while
循环不会在条件为false时立即停止运行。相反,一旦到达重新评估条件并发现其为false的点,它就会停止运行
这就是为什么在这里使用&&
或|
并不重要。在再次检查条件之前,循环不会退出,而在当前循环迭代完成运行之前,这种情况不会发生
这就给你留下了一些关于做什么的选择
在读取第一个字符串后,可以在while
循环中添加显式检查,以确认该字符串不是“quit”
,仅在需要时执行循环的其余部分
您可以在循环中间添加一个break
语句,告诉循环停止运行。这可以与选项(1)结合使用
希望这有帮助 因为当您上次在循环运行时输入name=“quit”时。执行while循环中的所有语句。因此姓氏会打印。在while循环中,它会在每次输入名字和姓氏后进行检查,这意味着只有在您输入姓氏后才会进行检查。您可以这样做:
while (true) {
getline(cin, name);
if (name == "quit") break;
getline(cin, sname);
if (sname == "quit") break;
}
诸如此类的事。:) 就像医生说的那样:
istream& getline (istream& is, string& str, char delim);
istream& getline (istream& is, string& str);
从is中提取字符并将其存储到str中,直到
找到分隔符delim(或换行符,
“\n”,表示(2))
如果在is中到达文件结尾或
在输入操作过程中会发生其他一些错误
如果找到分隔符,将提取并丢弃它(即
未存储,之后将开始下一个输入操作)
请注意,调用之前str中的任何内容都将替换为
新提取的序列
因此:
在任何时候使用if条件来中断循环。还可以在getline中指定结束字符(可选,但可以写入)。最后,修剪字符串:
#include <boost/algorithm/string.hpp>
int main() {
string name = "", sname = "";
cout << "enter your name and surname \n";
while (true) {
cout << "name: ";
getline(cin, name, "\n");
name = trim(name);
if (name == "quit") break;
cout << "surname: ";
getline(cin, sname, "\n");
sname = trim(sname);
if (sname == "quit") break;
};
return 0;
}
#包括
int main(){
字符串名称=”,sname=”;
多谢,这帮了大忙,我修复了代码。但我还有一个困惑。do-while
保证语句至少执行一次,即使条件为false。在这种情况下,while
也会执行,直到它重新评估条件,所以即使条件为false,也会再次执行一次一开始是错误的。那么它们实际上有什么不同呢?
#include <boost/algorithm/string.hpp>
int main() {
string name = "", sname = "";
cout << "enter your name and surname \n";
while (true) {
cout << "name: ";
getline(cin, name, "\n");
name = trim(name);
if (name == "quit") break;
cout << "surname: ";
getline(cin, sname, "\n");
sname = trim(sname);
if (sname == "quit") break;
};
return 0;
}