在这个无限循环中,当输入 0 时终止,当输入 int 范围之外的任何内容时,程序行为不正常



在这个输入 0 时终止的无限循环中,当我输入 int 范围之外的任何内容时,例如 2147483648(int + 1 的范围(该程序继续无限运行。

#include<iostream>
using namespace std;
int main(){
int n;
while(1){
cout<<"enter n: ";
cin>>n;
if(n==0)   break;
}
return 0;
}

来自 std::basic_istream::operator>> 的文档:

如果提取失败(例如,如果在数字 预期(,值保持不变,并设置故障位。 [至C++11]

因此,您看到的行为是由故障位引起的,这会导致对>>运算符的后续调用立即失败。

有趣的是,C++11 及更高版本的行为发生了变化:

如果提取失败,则将零写入值并设置故障位。如果 提取导致值太大或太小而无法容纳 值、标准::numeric_limits::马克斯(( 或标准::numeric_limits::分钟(( 已写入并设置故障位标志。 [自C++11起]

由于您不测试任何错误,因此您的代码行为不端也就不足为奇了。

试试这个

while(1){
cout<<"enter n: ";
cin>>n;
if (!cin || n==0)   break;
}

!cin是测试cin是否处于错误状态。例如,如果最后一个输入失败,就会发生这种情况,因为输入的内容无法转换为int

相关内容

最新更新