为什么这个while循环没有在下面的代码中结束?

noo*_*bie 2 c++ loops while-loop

抱歉,这段代码看起来很傻,但我只是想了解一下逻辑。

当用户quit作为输入输入时,我试图结束程序。

我写name != "quit" && 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;
    }
Run Code Online (Sandbox Code Playgroud)

输出:

enter your name and surname
>>name=John
>>surname=Wick
>>name=quit
>>surname=
Run Code Online (Sandbox Code Playgroud)

tem*_*def 5

好问题!这与while循环的工作方式有关。

在 C++ 中,while循环的工作方式如下:

  • 首先,它检查while循环中带括号的语句中的条件是否为真。
  • 如果是,它会执行整个while循环体,然后跳回到第一步。

换句话说,while只要条件为假,循环就不会停止运行。相反,一旦它到达重新评估条件并发现它是错误的点,它就会停止运行。

这就是为什么无论您是在使用&&还是||在此处都无关紧要。在再次检查条件之前循环不会退出,并且在当前循环迭代完成运行之前不会发生。

这为您提供了一些关于该做什么的选择。

  1. 您可以while在读取第一个字符串后向循环添加显式检查以确认该字符串 not "quit",仅在需要时才执行循环的其余部分。

  2. 您可以break在循环中间添加一条语句来告诉循环停止运行。这可以与选项 (1) 结合使用。

希望这可以帮助!