如果我在 C++ 中为 int 提供双精度,输入缓冲区中存储了什么?

what is stored in the input buffer if I provide double for an int in c++?

本文关键字:缓冲区 输入 存储 什么 双精度 C++ 中为 int 如果      更新时间:2023-10-16

我的代码是:

int main()
{
int x,y,z;
cout<<"Please input first integer : ";
x = getInt();
cin>>z>>y;
cout<<x <<"n"<<z<<"n"<<y;
return 0;
}

当我提供输入时,例如

Please input first integer : 34.5
34
0
-2
Process returned 0 (0x0)   execution time : 3.431 s
Press any key to continue.

这边发生了什么??

当尝试读取整数(使用>>(时,输入34.5与字符串34abcd34 42没有什么不同。

operator>>读取可能是整数一部分的字符,34,然后停止(将其余部分留在输入缓冲区中(。

继续cin >> z时,缓冲区仍包含.5。由于.不能是整数的一部分,因此输入失败,z设置为 0。

之后,流处于失败状态,甚至不会尝试输入y。如果我们想尝试更多输入,则必须清除流状态。


由于显示值时y仍未初始化,因此结果变得复杂。-2是这种未定义行为的一种可能影响。

如果提取失败(例如,如果在数字所在的位置输入了一个字母( 预期(,值保持不变,并设置故障位。

因此,对<<的后续调用将失败(设置了故障位(。