检查\ n字符,但之后没有任何内容

时间:2014-12-04 04:16:34

标签: c++

根据用户的意见,我们正在努力尝试制作一个简单的程序来说乌龟是否产卵。

乌龟以8个鸡蛋开始,只有当用户按下Enter键时才会产生一个鸡蛋。 ( '\ n')。

我们终于让它发挥作用,如果我们按Enter键,它会说乌龟产下一个鸡蛋并倒计数到0个鸡蛋。它还会说,如果你输入任何其他东西,就不会产下鸡蛋。

我们遇到的问题是如果有人输入多个不正确的字符,我们会多次返回'else'语句,我们使用了cin.ignore命令。

然而,我们质疑如果我们只输入cin.ignore(10,'\ n')会发生什么,并且输入超过10个字符。答案是它重复了“不做蛋”的“其他”声明。

有没有办法在第一个字符之后清除输入流,这样输入就可以达到他们想要的程度,并且它仍然只会为每个输入返回一行(无论是否产蛋)? p>

这是代码。

int main()
{
    using namespace std;

    int eggs = 8;
    char input;

    while (eggs > 0)
    {
        cout << "Enter input: ";
        cin.get(input);

        if (input == '\n')
        {
            cout << "Raphie laid an egg because you pressed enter.\n";
            eggs--;
            cout << "She has " << eggs << " left.\n";
        }

        else
        {
            cout << "Raphie didn't lay an egg.\n";
            cin.ignore(10, '\n');
        }
    }

    return 0;
}    

3 个答案:

答案 0 :(得分:1)

你可以使用......

std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

...在换行符之前忽略任何数量的输入。

答案 1 :(得分:0)

通常你想要读行或单个字符。请注意'\ n'如何适用于这两个类别。

如果您仍然希望(或有)坚持忽略字符,您可以尝试完全忽略numeric_limits<streamsize>::max(),这是任何给定时间流中的最大字符数。

答案 2 :(得分:-1)

int main()

{

using namespace std;

int eggs = 8;
char input;

while (eggs > 0)
{
    cout << "Enter input: ";
    cin.get(input);

    if (input == '\n')
    {
        if (eggs > 0)
        {
            cout << "Raphie laid an egg because you pressed enter.\n";
            eggs--;
            cout << "She has " << eggs << " left.\n";
        }
    }

    else
    {
        cout << "Raphie didn't lay an egg.\n";
        cin.ignore(10, '\n');
    }
}

return 0;
}