首页 > 解决方案 > 在这个无限循环中,当输入 0 时终止,当输入超出 int 范围的任何内容时,程序行为不端

问题描述

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

 #include<iostream>
    using namespace std;
    int main(){
     int n;
     while(1){

           cout<<"enter n: ";
           cin>>n;
           if(n==0)   break;

    }

    return 0;
    }

标签: c++loopsint

解决方案


std::basic_istream::operator>>的文档中:

如果提取失败(例如,如果在需要数字的地方输入了一个字母),则值保持不变并设置失败位。[直到 C++11]

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

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

如果提取失败,则将零写入 value 并设置 failbit。如果提取导致值太大或太小而无法容纳在值中,则写入 std::numeric_limits::max() 或 std::numeric_limits::min() 并设置故障位标志。[C++11 起]


推荐阅读