繁体   English   中英

C ++:意外的输出

[英]C++ : Unexpected output

我有以下代码:

int a , b , sum;
cin>>a>>b;
sum=a+b;
cout<<sum;

我完全知道您不能以整数存储浮点值。 因此,在我的程序的第一次运行中:

10 2.5

12

我得到了预期的输出12,因为忽略了小数部分2.5

在第二轮中,我将浮点值放在第一位:

2.5 10

442837

我得到一个垃圾值,有人知道发生了什么吗?

感谢您的帮助:)

初始化变量,您将看到发生了什么。 它不会忽略小数。 这会导致错误停止分析。 因此,您看到的疯狂数字实际上是未初始化的整数的值。

这是发生的情况:当您键入“ 10 2.5”时,它将10放入a,将2放入b。 它不会忽略0.5。 要了解实际发生的情况,请尝试以下代码:

int a=100 , b=200 , c=300, sum;
cin>>a>>b>>c;
cout<<a<<endl;
cout<<b<<endl;
cout<<c<<endl;

然后输入“ 10 2.5”,a将为10,b将为2,c将为300! “ .5”导致cin出错,因此将c保留为默认值。 但是由于您只读取2个值,所以它似乎工作正常。 因此,使用第二组输入“ 2.5 10”来尝试该版本。 A将为2,然后b将为200,c将为300。这表明cin在看到小数点并放弃时如何遇到错误。

最后,为了好玩,请删除示例中的初始化,并观察如何获得b和c的疯狂值。

引自std :: istream :: operator >> :“从流中顺序提取和解析字符,以将它们解释为适当类型的值的表示形式,该类型表示为val的值。”

检查std :: istream :: operator >> ,以深入了解读取输入的工作方式。

此外,您可以std :: cout << std :: cin.rdstate(); 在将双精度值读入int后,可以看到cin对象在这种操作下进入了错误状态。 我认为答案是cin >>操作不会进行隐式类型转换,并且会进入错误状态。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM