cin>>ival失灵,如何应对?

中才德创 2009-04-11 05:37:19
	deque<int> a_line;
int ival = 0;
while (cin >> ival) //#001
{
a_line.push_back(ival);

int curr_value;
curr_value = a_line.front();
curr_value = a_line.back();
}
cin.clear(); //#002
while (cin >> ival); //#003


如果在#001输入Ctrl+Z,使用#002还能让#003输入整数.
如果在#001输入字母'a',使用#002不能让#003输入整数.

似乎一个非法的'a',导制后面所有的cin>>ival失灵。
有什么比较好的方法,去应对可能出现的cin实际输入并不匹配的现象呢?
...全文
132 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
deque<int> a_line;
int ival = 0;
while (cin >> ival) //#001
{
a_line.push_back(ival);

int curr_value;
curr_value = a_line.front();
curr_value = a_line.back();
}
cin.clear(); //#002
fflush(stdin); //对付卡在缓冲区的字母要用这个
while (cin >> ival); //#003
adventurelw 2009-04-11
  • 打赏
  • 举报
回复
up 3楼
不是a的问题,是换行符干扰了最后一次输入。
wangyadong 2009-04-11
  • 打赏
  • 举报
回复
不好意思 看错了
可以这么修改
cin.clear(); //#002
cin.sync();//刷新缓冲区
否则,上一次的输入将会影响以后的输入
tianya0609 2009-04-11
  • 打赏
  • 举报
回复

deque<int> a_line;
int ival = 0;
while (cin >> ival) //#001
{
a_line.push_back(ival);

int curr_value;
curr_value = a_line.front();
curr_value = a_line.back();
}

cin.clear(); //#002 设置输入流标志位为goodbit
while(cin.get() != '\n') //把非法字符过滤掉
{
continue;
}

while (cin >> ival); //#003
return 0;

wangyadong 2009-04-11
  • 打赏
  • 举报
回复
do
{
cin.clear();
cin>>ival;
a_line.push_back(ival);

int curr_value;
curr_value = a_line.front();
curr_value = a_line.back();
} while (!cin.fail());
indexed 2009-04-11
  • 打赏
  • 举报
回复
可以用strstream呀!

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧