C++中有关清除cin缓存的问题。

...inti,j;while(1){cin>>i>>j;if(i>0&&j>0)break;}....我想判断输入两个数都是整数并且大于0才跳出WHILE循环。是不是用... ...
int i,j;
while(1)
{
cin>>i>>j;
if(i>0&&j>0) break;
}

....

我想判断输入两个数都是整数并且大于0才跳出WHILE循环。
是不是用if(cin)判断是不是类型正确?
输入的两个数一个合法一个不合法,比如输入“a 2” ,想要把i和j缓存中的数据都清除掉要怎么做?
用cin.ignore()吗?
cin.clear()是清除错误状态,并不改变错误的内容?
cin.sync();
用这个的话也只是把错误a清除掉,但是后面那个2还在啊。
假如我第一次输入一个a 2,第二次输入1 3,那i和j的值就变成2 1了吧? 因为在上次清除缓存的时候只是把错误的a清掉了,2还在吧。
展开
 我来答
百度网友c8138e9f7
推荐于2017-10-13 · TA获得超过692个赞
知道小有建树答主
回答量:182
采纳率:0%
帮助的人:274万
展开全部
你好。
可以加入下面的代码。
if(!cin) //也可以用cin.fail()
{
cout<<"输入有误,请重新输入!"<<endl;
cin.clear(); //错误位重置,这句话一定要写的
cin.sync(); //清空缓存区,还可以用fflush(stdin);也可以用cin.ignore(),但这个只清除一个字符,如果你输入了aa,还是会有问题的。
}
你好,回答你补充的问题。
cin.clear()对,是不清空缓存区的。
cin.sync()是一下把整个缓存区都清空了,不是清空一个字符。cin.ignore是清空一个字符的。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
成语迷宫
推荐于2017-09-12 · 知道合伙人游戏行家
成语迷宫
知道合伙人游戏行家
采纳数:1702 获赞数:9023
毕业于山东农业大学,学士。从事游戏软件开发5年,涉猎广泛,熟悉诸多游戏技巧。现任公司研发顾问。

向TA提问 私信TA
展开全部
1、数据正确与否,程序都会继续往下走,格式不正确时顶多是得一个非预期的数据 第二段,循环的去读,直到有合法数据才跳出,而一旦出现不合法的数据时,读整数的语句无法自动跳过无效的字符;
2、只有清除掉整数以外的字符,才可以再次读取,送入到输入缓冲区,但并不会刷新输入流。输入流是C++自己实现的,流的使用也由它管理,C++并没有接收到回车符就刷新输入缓冲流一说。在
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友4ec6aac92
2009-07-01 · TA获得超过247个赞
知道答主
回答量:218
采纳率:100%
帮助的人:130万
展开全部
flush() endl都可以 不熟悉你说的函数呢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式