C++输入输出问题求助
#include<iostream>int main()
{
const unsigned short ITEM=10;
int num;
std::cout<<"请输入"<<ITEM<<"个整型数:"<<"\n";
for(int i=0;i<ITEM;i++)
{
std::cout<<"请输入第"<<i+1<<"个数字:";
while(!(std::cin>>num))
{
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;
}
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个字符或直到到达第一个换行符。 我的问题是有了第12行代码为什么还要第13行呢? 注释不是已经写得很清楚了吗 qiuyouzhi 发表于 2020-2-17 16:42
注释不是已经写得很清楚了吗
我的问题是cin.clear()不是已经清空了缓冲区了吗?为什么还需要cin.ingore来忽略换行号呢? 大风起兮90+ 发表于 2020-2-17 17:11
我的问题是cin.clear()不是已经清空了缓冲区了吗?为什么还需要cin.ingore来忽略换行号呢?
后边会再输入一个回车(换行符)
页:
[1]