gpt4 book ai didi

c++ - 如果我在 C++ 中为 int 提供 double,输入缓冲区中存储的是什么?

转载 作者:行者123 更新时间:2023-11-27 23:45:22 25 4
gpt4 key购买 nike

我的代码是:

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 与字符串 34abcd 没有区别34 42

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

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

在那之后,流处于失败状态并且甚至没有尝试对 y 的输入。如果我们想尝试更多输入,则必须清除流状态。


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

关于c++ - 如果我在 C++ 中为 int 提供 double,输入缓冲区中存储的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51130023/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com