以下是我的代码:
#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。