学习札记:cin.clear(istream::failbit)
2012-11-18 23:37
295 查看
C++ Primer 上有如下例子
若输入2.1,会进入死循环。究其原因,是编译器VS 2005不能正确支持cin.clear(istream::failbit).。可以用cin.clear(),把bad,fail,eof三个位都置0。改写如下
注意,恢复流之后需要跳过类型非法的输入项(否则会出现死循环),采用ignore函数跳过若干字符(跳过200个字符或遇到空格或文件结束为止),所以输入数据必须以空格作为间隔。
int ival; while(cin>>ival,!cin.eof()){ if(cin.bad()){ throw runtime_error("IO stream corrupted"); } if(cin.fail()){ cerr<<"bad data,try again"<<endl; cin.clear(istream::failbit); } }
若输入2.1,会进入死循环。究其原因,是编译器VS 2005不能正确支持cin.clear(istream::failbit).。可以用cin.clear(),把bad,fail,eof三个位都置0。改写如下
int ival; while(cin>>ival,!cin.eof()){ if(cin.bad()){ throw runtime_error("IO stream corrupted"); } if(cin.fail()){ cerr<<"bad data,try again"<<endl; //cin.clear(istream::failbit); cin.clear(); cin.ignore(200,' '); } }
注意,恢复流之后需要跳过类型非法的输入项(否则会出现死循环),采用ignore函数跳过若干字符(跳过200个字符或遇到空格或文件结束为止),所以输入数据必须以空格作为间隔。
相关文章推荐
- 学习札记:cin.clear(istream::failbit)
- C++ primer cin.clear(istream::failbit) 重置失败 陷入死循环
- c++ primer(中文版第四版)第8章关于cin.clear(istream::failbit)的一个误区
- C++中的cin函数和异常的来源(failbit)与处理(clear)
- 有关cin.fail,cin.clear,cin.sync的应用
- cin用法介绍(特别是学习了cin.clear和cin.sync)
- 有关cin.fail,cin.clear,cin.sync的应用
- 【C++学习】输入控制器,cin.clear()与^Z的标记---ShinePans
- C++之cin.eof, cin.bad, cin.good, cin.fail, cin.clear
- cin.fail(), cin.bad(), cin.good(), cin.clear(), cin.ignore()
- cin用法介绍(特别是学习了cin.clear和cin.sync)
- cin.fail(), cin.bad(), cin.good(), cin.clear(), cin.ignore()
- 有关cin.fail(),cin.clear(),cin.sync的应用
- C++标准库 之 iostream库的学习笔记(一)iostream库的介绍和istream,ostream类以及cin,cout对象
- cin学习--------cin.get()和cin.getline(),cin.clear(),cin.sync()等的用法.
- C++学习代码--cin.clear
- cin用法介绍(特别是学习了cin.clear和cin.sync)
- Java学习札记——后台增删改查
- Java学习札记——集合框架二 Map
- [gcc]: unknown (64-bit) [FAIL]