int变量中的循环和字符不能像我期望的那样工作

时间:2010-11-06 23:17:14

标签: c++ loops int character

我在这段代码中看到了一个不寻常的问题:

#include <iostream>
using namespace std;

int main()
{
 int number;
 bool repeat=true;

 while (repeat)
 {
  cout<<"\nEnter a number:";
  cin>>number;
  cout<<"\nNumber is:"
   <<number;
  cout<<"\nRepeat?:";
  cin>>repeat;
 }
 system("pause");
 return 0;
}

这里的代码当我在 int 类型变量中放置字符这样的“A”时,循环反复重复并且不要问我是否要重复。 当我把字符不是整数时,这个问题就出现了。 这也会出现 for

为什么会发生这种情况? 感谢

2 个答案:

答案 0 :(得分:3)

读入无法转换的用户输入后,输入流处于无效状态。您需要清空流并调用clear方法重置流上的错误位以恢复正常操作。

如果检测到输入不成功(使用输入流状态位,可通过good()fail()等方法访问),则可以使用与此类似的代码重置流:

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

答案 1 :(得分:0)

当你无法从中提取int并且没有恢复时,你将cin置于错误状态。因此,当您尝试从中提取重复时,流仍处于失败状态。您需要检查号码是否失败(只需使用if(cin&gt;&gt; number))。