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还在吧。 展开
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还在吧。 展开
3个回答
展开全部
你好。
可以加入下面的代码。
if(!cin) //也可以用cin.fail()
{
cout<<"输入有误,请重新输入!"<<endl;
cin.clear(); //错误位重置,这句话一定要写的
cin.sync(); //清空缓存区,还可以用fflush(stdin);也可以用cin.ignore(),但这个只清除一个字符,如果你输入了aa,还是会有问题的。
}
你好,回答你补充的问题。
cin.clear()对,是不清空缓存区的。
cin.sync()是一下把整个缓存区都清空了,不是清空一个字符。cin.ignore是清空一个字符的。
可以加入下面的代码。
if(!cin) //也可以用cin.fail()
{
cout<<"输入有误,请重新输入!"<<endl;
cin.clear(); //错误位重置,这句话一定要写的
cin.sync(); //清空缓存区,还可以用fflush(stdin);也可以用cin.ignore(),但这个只清除一个字符,如果你输入了aa,还是会有问题的。
}
你好,回答你补充的问题。
cin.clear()对,是不清空缓存区的。
cin.sync()是一下把整个缓存区都清空了,不是清空一个字符。cin.ignore是清空一个字符的。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐于2017-09-12 · 知道合伙人游戏行家
关注
展开全部
1、数据正确与否,程序都会继续往下走,格式不正确时顶多是得一个非预期的数据 第二段,循环的去读,直到有合法数据才跳出,而一旦出现不合法的数据时,读整数的语句无法自动跳过无效的字符;
2、只有清除掉整数以外的字符,才可以再次读取,送入到输入缓冲区,但并不会刷新输入流。输入流是C++自己实现的,流的使用也由它管理,C++并没有接收到回车符就刷新输入缓冲流一说。在
2、只有清除掉整数以外的字符,才可以再次读取,送入到输入缓冲区,但并不会刷新输入流。输入流是C++自己实现的,流的使用也由它管理,C++并没有接收到回车符就刷新输入缓冲流一说。在
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
flush() endl都可以 不熟悉你说的函数呢
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询