注册 登录
编程论坛 C++教室

[求助]关于cin.fail(),cin.clear(),cin.sync()的解释

kisscjy 发布于 2007-05-10 14:43, 2347 次点击
如题,希望最好给个例子来看看~~
以及每个函数的功能与实现和他们的头文件~~~
8 回复
#2
weishj2007-05-10 17:25

#include <iostream>
using namespace std;
void main()
{
int a;
cout<<"输入一个字母:"<<endl;
cin>>a; //int型变量中放了char型数据,failbit置1
cout<<"cin.fail()="<<cin.fail()<<endl; //输出1
cout<<"输入一个数字:"<<endl; //由于failbit值为1,输入流不能正常工作
cin>>a; //故此处的输入无效
cout<<a<<endl; //输出不确定值
cin.clear(); //此处用cin.clear()流标志复位
cout<<"cin.fail()="<<cin.fail()<<endl; //此处failbit已为0
cout<<"输入一个数字:"<<endl;
//但刚才输入的字符并没有从流中清除,所以cin>>a又把那个字符放入a中,流输入流又不能正常工作
cin>>a;
cout<<a<<endl; //输出不确定值
cout<<"cin.fail()="<<cin.fail()<<endl; //在此处failbit又为1
cin.clear(); //再次修复输入流
cin.ignore(); //取走刚才流中的字符
cout<<"输入一个数字:"<<endl; //再次接收用记输入,这次输入数字,正常输出了
cin>>a;
cout<<"a="<<a<<endl;
//现在再看一下输入流的failbit
cout<<"cin.fail()="<<cin.fail()<<endl;//输出0,表明输入流已恢复正常

}

#3
weishj2007-05-10 17:32
sync()用法我也不太清楚,哪位高人帮下
#4
aipb20072007-05-10 18:20
sync() 清空输入缓冲区的作用。

和ignore()类似作用!

A protected virtual function that tries to synchronize the controlled streams with any associated external streams.

查查msdn吧!
#5
kisscjy2007-05-10 21:32
LS的~~
什么叫清空输入缓冲区~~~
什么又叫缓冲??
说清楚一点啊~~
我是菜鸟一只.....

谢谢了~~
#6
kisscjy2007-05-10 22:40
我想再问一个问题~
根据二楼的源代码,程序是可以正常运行
可当我把头文件
#include<iostream>
using namespace std;
改为
#include<iostream.h>
时,程序就会一直循环下去~~
请问这是为什么?????
#7
aipb20072007-05-11 09:09
为什么要改呢?难得楼主觉得用.h更好?
#8
kisscjy2007-05-11 12:32
我只是想知道为什么.h文件用不了cin.fail(),cin.clear()而已

想有点求知精神而已~~
1