int a;
int b;
while (1)
{
cin >> a >> b;
if (a < 1 || b < 1)
continue;
else
break;
}
当输入数字时,会正常跳出循环,而输入字符如 a b时,会无限循环下去,且不会接受键盘输入。
是cin的buffer没有清空吗?要如何操作才能解决这种问题呢?初学流的操作,请DX指正!
...全文
143323打赏收藏
cin >> a >> b的操作问题
int a; int b; while (1) { cin >> a >> b; if (a < 1 || b < 1) continue; else break; } 当输入数字时,会正常跳出循环,而输入字符如 a b时,会无限循环下去,且不会接受键盘输入。 是cin的buffer没有清空吗?要如何操作才能解决这种问题呢?初学流的操作,请DX指正!
因为上次输入的流有错误没有清除错误状态也没有清空缓冲区,这样错误流就会传值给cin>>b;
也会产生错误而退出,即m还是0.可以这样改一下:
#include <iostream>
using namespace std;
void main()
{
int a,b;
int n = 0 , m = 0;
char buf[80];
while (cin >> a)
++n;
cin.clear();//清楚错误状态
cin.getline(buf,80);//清空缓冲区,将缓冲区的流传给buf来达到清空
这里主要是由于cin在接收字符时遇到空白符(回车、空格、制表符等)时就停止接收字符,并且将空白符留在缓冲区中。所以此处输入a b时,a能够输入并且被接收,但是紧接着试一个空格cin就停止了,并且b遇到的第一个字符就是空格所以无法接收字符。此处改正如下:
int a;
int b;
while (1)
{
cin >> a;
cin.get();
cin>>b;
if (a < 1 || b < 1)
continue;
else
break;
}
while (1)
{
printf("please input two numbers!\n");
while ( !(cin >> a >> b) )
{
printf("please input two numbers again!\n");
cin.clear(); //重置cin状态为true
cin.sync(); //清空输入缓冲
}
你可以用这个程序看看
#include <iostream>
int main(){
int a;
int b;
while (1){
std::cin >> a >> b;
std::cout <<a<<"\t\t"<<b<<std::endl;
if (a < 1 || b < 1)
continue;
else
break;
}
return 0;
}