如果输入类型与目标类型不同,"cin"变量是否重置为某个默认值?

Does "cin" reset variable to some default value if input type differs from destination type?

本文关键字:类型 默认值 是否 cin 目标 输入 如果 变量      更新时间:2023-10-16

我对"cin"的行为有问题(我不明白(。 我的IDE是Windows操作系统下的Netbeans(使用Cygwin(。

下面是一个代码示例:

int main()
{
int temp = -1;
std::cin >> temp;    // here user enters string of characters (string) or a single character
if (temp == 0)
std::cout << "temp = " << temp << ".n";
if (temp == -1)
std::cout << "temp = " << temp << ".n";
return 0;
}

如果我输入某种字符/字符串,此代码将显示消息temp = 0。这就像char转换为int并且转换总是以值0结尾。

如果您能解释此行为,谢谢。

这是std::basic_istream::operator>>的预期行为;因为C++11如果提取失败,变量将被设置为0。在 C++11 之前,变量不会被修改,其原始值将保持不变。

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

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

如果读取失败operator>>会将值设置为零(cpp首选项(:

如果提取失败,则将零写入值并设置故障位。