返回信息流恳请各位高手帮忙看看!!不知道为什么当cin.fail()==1 时就进入了死循环,一直输出
a fail file
#include <iostream>
using namespace std;
int main()
{
int i=0;
while (cin>>i,!cin.eof())
{
if (cin.bad())
{
cout<<"a wrong input"<<endl;
throw runtime_error("input device error");
}
else if (cin.fail())
{
cout<<"a fail file"<<endl;
cin.clear();
continue;
}
cout<<i<<endl;
}
return 0;
}
这是一条镜像帖。来源:北邮人论坛 / cpp / #30963同步于 2009/11/8
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
求教一个简单的有关c++流的程序
hjxhjh
2009/11/8镜像同步4 回复
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
当输入一个非int类型的字符时,cin.fail()==true,此时该字符还在输入缓冲中,没被读掉,所以下一次cin时,还是会使cin.fail()==true.
可以在cin.clear()语句之后加上fflush(stdin),来清空输入缓冲区。
【 在 hjxhjh 的大作中提到: 】
: 恳请各位高手帮忙看看!!不知道为什么当cin.fail()==1 时就进入了死循环,一直输出
: a fail file
: #include <iostream>
: ...................
哦,谢谢~~~非常感谢,这个方法行得通。感谢~~
【 在 vcpp 的大作中提到: 】
: 当输入一个非int类型的字符时,cin.fail()==true,此时该字符还在输入缓冲中,没被读掉,所以下一次cin时,还是会使cin.fail()==true.
: 可以在cin.clear()语句之后加上fflush(stdin),来清空输入缓冲区。
这个不是c++ primer中的程序吗,竟然都错了
【 在 hjxhjh 的大作中提到: 】
: 恳请各位高手帮忙看看!!不知道为什么当cin.fail()==1 时就进入了死循环,一直输出
: a fail file
: #include <iostream>
: ...................
#define RS_CLR PORTD &= ~(1 << PD3)
#define RS_SET PORTD |= (1 << PD3)
这两个语句中的移位是怎么个移法?是左移乘以2的概念吗?我刚刚接触程序,不太懂,希望各位大牛能指点一二。十分感谢