这就是代码
#include<iostream>
using namespace std;
int main(){
int a,b;
while(true){
cout<<"Enter the value of a and b ";
cin>>a>>b;
if(a=='|'||b=='|')
break;
else
cout<<"The value of a is "<<a<<"\nThe value of b is "<<b<<endl;
}
}
问题是,编写一个由while循环组成的程序,该循环(每次循环)读取两个in,然后打印它们。输入终止'|‘时退出程序。
当我输入像|这样的输入时,它会无限地打印“a的值是,b的值是”。这样做的原因是什么?enter code here
发布于 2016-12-18 18:49:39
你的istream运算符>> as_int
失败了,实际上什么也没做,所以你的循环还在继续。以字符形式输入并通过检查转换为整数,或者检查流中是否有错误。
cin>>a>>b;
if( cin.fail( ) )
break;
另外:如果你跟踪到istream运算符,你就会看到为什么它没有阻塞,它失败了。当某些事情出错时,总是追踪……
发布于 2016-12-18 18:53:49
在默认情况下,当你试图读入一个无效的数据类型(例如,这里是试图将一个字符读入一个整型变量)时,std::cin (我认为所有的流)都会设置一个错误标志,这个标志会阻止其他std::cin运行,直到这个标志被清除。要休息流,请使用std::cin.clear()来重置错误标志,然后必须通过std::cin.ignore()或读取字符串缓冲区等方式从流中删除错误输入,因为它仍然在那里。
https://stackoverflow.com/questions/41211261
复制相似问题