1.IO标准库类型和头文件
2.简单的iostream继承层次
3.IO对象不可复制或赋值,如需传递或返回IO对象,则必须传递或返回指向该对象的指针或引用(必须为非const)。
eg:
void f(ostream os) //error
{
os<<"test";
}
4.IO标准库的条件状态:
5.简单检测流的真值
int main()
{
int a;
cin>>a;
cout<<(cin?1:0)<<endl; //当上一条语句输入为数值时输出的1,否则输出0
return 0;
}
6.每个IO类定义了badbit,failbit,eofbit常量值
eg:
int main()
{
cout<<iostream::badbit<<endl; //4
cout<<iostream::failbit<<endl;//2
cout<<iostream::eofbit<<endl;//1
return 0;
}
7.rdstate():
返回一个iostate类型的值,该值对应于流当前的整个条件状态
eg:
istream::iostate old=cin.rdstate();
8.一次处理多种状态:
eg:
ifstream in;
.........
in.setstate(ifstream::failbit|ifstream::badbit);
9.clear():
.......
cin.clear();
cin.ignore(1024,' '); //跳过1024个字符,或遇到空格为或文件结束为止
易错提醒:
clear()只是将流设置为有效状态,当再次读取缓冲区的数据时读取到的依然是原来的数据,如果 不跳过原来无效的数据,流条件状态将会再次进入failbit。
综合应用:
eg:
int main()
{
int val;
while(cin>>val ,!cin.eof()) //循环读取数据,遇到失败的跳过,直到文件结束符为止
{
if(cin.bad())
{
cerr<<"bad,error!"<<endl;
exit(-1);
}
if(cin.fail())
{
cerr<<"fail,illegal vale,try again!"<<endl;
cin.clear();
cin.ignore(1024,' ');
continue;
}
if(cin.good())
{
cerr<<"good"<<endl;
}
}
return 0;
}
运行结果:
下集预告:
输出缓冲区的管理