While 循环对 C++ 中的字符串中的每个单词重复

While loop repeats for every word in a string in C++

我正在尝试制作一个神奇的 8 球,它可以为除“再见”之外的任何输入提供随机预设答案。每次调用 void 函数 magic8ball() 时,它都会生成一个 0 - 19 的随机数,并向控制台打印相应的响应。

int main()
{
    string question;
    cin >> question;
    while (question != "bye") {
        magic8ball(); 
        cout << "~Ask another question.\n";
        cin >> question;
    }
    return 0;
}

出于某种原因,如果问题的输入有多个单词/字符之间有空格,则循环会在再次请求输入之前对每个单词重复。我卡住了“cout << question << endl;”在那里,它显示了字符串中的每个单词(以及 magic8ball 和“问另一个”的调用)。 例如

>hi frend
 ... Ask again later
hi
~Ask another question.
 ... Don't count on it
frend
~Ask another question.

如何防止 while 循环将字符串视为一系列单词?为什么 cin 不与 magic8ball() 和 cout 一起触发?

std::cin看到白色就停止阅读space。 Space 也算作白色space。

如果您希望您的字符串具有 space,请使用 std::getline()

int main()
{
    string question;
    std::getline(std::cin, question);
    while (question != "bye") {
        magic8ball(); 
        cout << "~Ask another question.\n";
        std::getline(std::cin, question);
    }
    return 0;
}