继承我的榜样:
while (response == 'y')
{
playOneGame();
cout << "Great! Do you want to play again (y/n)? ";
cin >> response;
}
如果你输入:yy
它输出两次输出:
“太棒了!你想再玩一次(是/否)?太棒了!你想再玩一次(是/否)?”
我想了解原因。如果重要的话,这个程序是用C ++编写的。谢谢。
答案 0 :(得分:2)
由于您要将其与char
(result == 'y'
)进行比较,我假设result
也是char
。
cin
操作只读取一个char,并将第二个放在输入缓冲区上。然后,下一次循环,它会读取第二个&#39; y&#39;无需任何额外的用户输入。
如果您想确保缓冲区中没有任何内容,请在读取行终止符之前进行读取。或者您可以阅读string
:
string response = "y";
// continues on anything that starts with lowercase 'y'.
// exits on anything else.
while (response.length() >= 1 && response[0] == 'y') // length check maybe unnecessary?
{
playOneGame();
cout << "Great! Do you want to play again (y/n)? ";
cin >> response;
}
答案 1 :(得分:0)
不清楚response
的类型,但我认为它是char
。
char response;
while(response=='y'){
playOneGame();
cout << "Great! Do you want to play again (y/n)? ";
cin >> response;
}
cin
读取所有字符,直到您停止向其发送字符为止。简单地说,cin
得到整个终端线,所以当你按'yy'时,while循环运行两次。
如果循环运行两次并打印消息两次: 1.它不会再次开始游戏。 2.甚至,它开始游戏,当它结束时,对于第二个y,它确实在没有询问的情况下再次开始游戏。
修改代码以读取一个字符并继续。您可以使用getche()获取一个字符并继续。
答案 2 :(得分:0)
这正是您所需要的。将以下代码应用于您的实际案例。
#include<iostream>
#include<limits>
using namespace std;
int main()
{
char response = 0;
while(cin >> response){
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout << "You enterd: " << response << endl;
}
return 0;
}
以下是解释:
Why would we call cin.clear() and cin.ignore() after reading input?