根据用户的意见,我们正在努力尝试制作一个简单的程序来说乌龟是否产卵。
乌龟以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;
}
答案 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;
}