为什么用char代替int的输入总是显示零值



以下是我的代码:

#include <iostream>
using namespace std;
int main() {
int num;
cout<<"Enter a number: ";
cin>>num;
cout<<"The number is: "<<num;
return 0;
}

如果在cin>>num的提示中输入一个字符或字符串而不是整数,则每次都会将num的值返回为0。是因为它在C++中以这种方式实现,还是我遗漏了一些琐碎的概念?任何答案都会有很大帮助。

这是C++11中引入的一个特性。来自cppreference;

之前:

如果提取失败(例如,如果在需要数字的地方输入了一个字母(,则不修改值,并设置故障位。(直到C++11(

现在:

如果提取失败,则向值写入零,并设置故障位。如果提取导致值太大或太小而无法放入值,则写入std::numeric_limits:max((或std::numeric_limits::min((,并设置故障位标志。(自c++11起(

请注意,在C++11之前,您的代码可能会调用未定义的行为。如果输入失败,则使用未初始化的num。在这种情况下,作为输出的0和任何其他输出一样有效(因为未定义的行为是未定义的(。

Istreams对象有检测错误输入的标志:每当错误输入传递给cin时,就会设置错误输入标志。通过调用cin.fail()并检查其计算结果是否为true,您可以主动监视输入是否不正确。在这种情况下,cin将为您传递的变量赋值0。

相关内容

最新更新