|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- #include<iostream>
- int main()
- {
- const unsigned short ITEM=10;
- int num[ITEM];
- std::cout<<"请输入"<<ITEM<<"个整型数:"<<"\n";
- for(int i=0;i<ITEM;i++)
- {
- std::cout<<"请输入第"<<i+1<<"个数字:";
- while(!(std::cin>>num[i]))
- {
- std::cin.clear(); //记得clear后面要加一个括号
- std::cin.ignore(100,'\n'); //不加这一行代码就会陷入死循环
- std::cout<<"请输入一个合法的值:";
- } //在for中定义的变量只能在for中使用
- }
- int total=0;
- for(int j=0;j<ITEM;j++)
- {
- total=total+num[j];
- }
- std::cout<<"总和是:"<<total;
- std::cout<<"平均值是:"<<(float)total/10;
- return 0;
- }
复制代码
请问while循环里面的cin.clear()不是已经清理了缓冲区吗,为什么后面还要加一个cin.ignore呢?
我发现不加cin.igonre的话输入一个非法输入a就会陷入死循环,这是为什么呢?
cin.clear()不是清空缓冲区,而是清除错误标志。当输入一个非法值,导致错误标志被设置,就不能继续进行后面的输入操作了。
所以要用clear清除错误标志,以便下一次输入。std::cin.ignore(100,'\n');才是清除错误的输入,意思是读取并丢弃接下来的100个字符或直到到达第一个换行符。
|
|