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;
}
我正在尝试制作一个神奇的 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;
}