c++ - 在这个无限循环中,当输入 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;
}
解决方案
从std::basic_istream::operator>>的文档中:
如果提取失败(例如,如果在需要数字的地方输入了一个字母),则值保持不变并设置失败位。[直到 C++11]
因此,您看到的行为是由故障位引起的,这会导致对>>
操作员的后续调用立即失败。
有趣的是,C++11 及更高版本的行为发生了变化:
如果提取失败,则将零写入 value 并设置 failbit。如果提取导致值太大或太小而无法容纳在值中,则写入 std::numeric_limits::max() 或 std::numeric_limits::min() 并设置故障位标志。[C++11 起]
推荐阅读
- acumatica - 使用基于合同的 API 从 Acumatica 中提取供应商的 ACH 信息
- javascript - VScode-Code-Runner 只返回目录,没有输出
- azure - 无法从 Azure DEVOPS 发布项目
- regex - Python正则表达式从匹配中打印2个项目
- pandas - 数据框 - 基于其他列值的时间戳之间的时间跨度
- javascript - 出于开发目的禁用 babel.config.json 文件中的 Babel 缓存?
- excel - 验证码未在 VBA 中捕获
- angular - 在angular8中显示通知消息?
- c# - Can delegates wrap classes in C#?
- linux - 如何替换包含相同内容的行(LINUX)?