如果输入两次所需的输入,它会输出两次?

时间:2018-01-31 20:31:16

标签: c++

继承我的榜样:

while (response == 'y')
{
    playOneGame();
    cout << "Great! Do you want to play again (y/n)? ";
    cin >> response;
}

如果你输入:yy

它输出两次输出:

“太棒了!你想再玩一次(是/否)?太棒了!你想再玩一次(是/否)?”

我想了解原因。如果重要的话,这个程序是用C ++编写的。谢谢。

3 个答案:

答案 0 :(得分:2)

由于您要将其与charresult == '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?