我如何解决这个奇怪的 while 循环错误?

Ale*_*der 2 c++ while-loop

我有一个 while 循环,它询问用户的查询并接受响应,可以是一个词,也可以是一个句子。输出让我难以置信。

std::string response;

while (response != "!quit")
    {
        cout << "Query? ";
        cin >> response;
        if (response == "!quit")
        {
            cout << "Thank you for using this program!";
            exit(0);
        }
    }
Run Code Online (Sandbox Code Playgroud)

输出如下所示:

Query? how are you
Query? Query? Query? how are you today
Query? Query? Query? Query? hi
Query?
Run Code Online (Sandbox Code Playgroud)

为什么它打印出与响应相同数量的单词的“查询”?

gsa*_*ras 5

std::cin 将阅读,直到它变成一个空白。

因此,当您输入“你好吗”时,cin将被调用三次,以便它消耗所有三个空格。所以第一个cin会读“如何”,第二个“是”,第三个“你”。

所以教你的是,为了阅读一个句子,你需要另一种方法,例如通过使用std::getline,像这样:

std::getline(std::cin, response)
Run Code Online (Sandbox Code Playgroud)

详情请阅读什么是函数getline和std :: istream的::运算符>>()之间的区别?


PS:请注意在使用 读取数字后可能出现的尾随换行符cin,您可能希望使用该字符,例如使用getchar();.