【发布时间】:2012-07-14 14:43:39
【问题描述】:
你如何做到以下几点:
while (iNumberOfPlayers <2 || iNumberOfPlayers >5)
{
cout << "Enter number of players (1-4): ";
cin >> iNumberOfPlayers;
cin.clear();
std::string s;
cin >> s;
}
在查看了我陷入的循环之后,看起来cin 没有被重置(如果我输入 x)只要我在 while 循环中,cin 就会再次读取 X .猜测这是缓冲区问题,有什么办法可以清除它?
然后我尝试了:
while (iNumberOfPlayers <2 || iNumberOfPlayers >5)
{
cout << "Enter number of players (1-4): ";
cin >> iNumberOfPlayers;
cin.clear();
cin.ignore();
}
除了一次读取所有内容 1 之外,它可以工作。如果我输入“xyz”,那么循环会经过 3 次才停止再次询问。
【问题讨论】:
-
你需要声明一个,比如
int a = 0; -
但是如果你将
a声明为一个int,那不是让a很难成为一个int吗? -
@SimonAndréForsberg int a = 0;辛
-
Matt,您的帖子标题询问是否可以将字符串测试为 int,但您的代码中没有字符串。 cin 不会自动将内容读取为字符串。我刚刚测试了输入不良数据,“a”仍然是“0”。
-
@Matt:不,如果程序崩溃是因为有人输入了非数字数据,那是因为你的代码没有检查输入是否失败。 stream 在尝试解析无效输入时不会crash。