| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 904 人关注过本帖
标题:[求助]一段流状态的查询和控制代码。
只看楼主 加入收藏
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
 问题点数:0 回复次数:8 
[求助]一段流状态的查询和控制代码。
#include <iostream>
using namespace std;

void main(){
int ival;
while (cin >> ival,!cin.eof()){
if (cin.bad())
throw runtime_error("IO stream corrupted");
if (cin.fail()){
cerr << "bad data,try again";
cin.clear(istream::failbit);
continue;
}
}
}
书上抄下来的,结果运行结果不是所期望的!运行下就知道了,期望输入整形值。
若遇到输入非整形值就提示出错并重新输入。
但是我输入为字符的时候就出现了无限循环!

点解,谢谢!
搜索更多相关主题的帖子: 整形 cin 状态 代码 
2007-04-16 15:25
wangxiang
Rank: 2
等 级:新手上路
威 望:5
帖 子:376
专家分:0
注 册:2006-3-28
收藏
得分:0 

#include <iostream>
#include <stdexcept>
using namespace std;

int main(){
int ival;
while (cin >> ival, !cin.eof()){
if (cin.bad())
throw runtime_error("IO stream corrupted");
if (cin.fail()){
cerr << "bad data,try again";
cin.clear();
cin.ignore();
continue;
}
}

return 0;
}


2007-04-16 16:19
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
楼上的,能解释下修改的原因吗?还有我哪里错了?

Fight  to win  or  die...
2007-04-16 19:31
游乐园
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:671
专家分:0
注 册:2006-11-1
收藏
得分:0 
cin.clear() //只是清除了错误标记位 但没有清空输入流 残余的回车会构成无限循环的
用cin.ignore() 来清空输入流就可以了

unicorn-h.spaces. ◇◆ sava-scratch.spaces.
2007-04-16 19:49
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
以下是引用游乐园在2007-4-16 19:49:51的发言:
cin.clear() //只是清除了错误标记位 但没有清空输入流 残余的回车会构成无限循环的
用cin.ignore() 来清空输入流就可以了

再请教下,clear()和clear(istream::failbit)有哪不一样,我的理解就是后者是清除特定的错误状态,那在我的代码中两者作用就该一样。但是
用cin.clear();
cin.ignore();
和cin.clear(istream::failbit);
cin.ignore();
后者仍然有那个问题。

还有,我发现
用cin.clear();
cin.get();
也行,难道 get()也清空输入流?


麻烦解答下,不懂啊!


Fight  to win  or  die...
2007-04-16 20:56
游乐园
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:671
专家分:0
注 册:2006-11-1
收藏
得分:0 
cin.clear(istream::failbit);// 是清除错误标志位 failbit 是设置错误但可挽回的标志位

应该为 cin.clear(istream::goodbit); //清除后 设置正确的标志位

get() //也可以清空输入缓冲区

unicorn-h.spaces. ◇◆ sava-scratch.spaces.
2007-04-16 22:12
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 

谢谢了,

c++primer也会有错


Fight  to win  or  die...
2007-04-16 22:43
游乐园
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:671
专家分:0
注 册:2006-11-1
收藏
得分:0 
这种经典著作应该没有错吧

不知道 C++primer 里用的是哪种编译器

unicorn-h.spaces. ◇◆ sava-scratch.spaces.
2007-04-17 10:30
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 

反正不是VC,里面很多代码在都跟VC运行的结果不符合!

呵呵~


Fight  to win  or  die...
2007-04-17 10:37
快速回复:[求助]一段流状态的查询和控制代码。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023938 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved