我有以下代码:
int a , b , sum;
cin>>a>>b;
sum=a+b;
cout<<sum;
我完全知道您不能将浮点值存储在整数中。 所以在我的计划第一次运行期间:
10 2.5
12
我得到预期的输出12,因为忽略了2.5的小数部分
在第二次运行中,我首先放置浮点值:
2.5 10
442837
我得到垃圾值,有人知道发生了什么吗?
帮助表示赞赏:)
答案 0 :(得分:13)
初始化变量,您将看到发生了什么。它不会忽略小数。它导致错误停止解析。所以你看到的疯狂数字实际上是未初始化整数的值。
以下是发生的事情: 键入&#34; 10 2.5&#34;它将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;
然后输入&#34; 10 2.5&#34; a将是10,b将是2,c将是300! &#34; .5&#34;导致cin得到错误,所以它只是将c保留为默认值。但由于你只读了2个值,它似乎工作得很好。因此,请尝试使用您的第二组输入&#34; 2.5 10&#34;。 A将为2,则b将为200,c将为300.这表明cin在看到小数点时遇到错误,并且放弃了。
最后为了好玩,删除我的示例中的初始化,并观察你如何获得b和c的疯狂值。
答案 1 :(得分:1)
来自std::istream::operator>>的引用:“从流中按顺序提取和解析字符,将它们解释为正确类型值的表示形式,存储为val的值。”
检查std::istream::operator>>以深入了解阅读输入的工作原理。
此外,你可以std :: cout&lt;&lt;的std :: cin.rdstate();在将一个double值读入int后,看到cin对象在这样的操作中进入错误状态。我认为答案是cin&gt;&gt; operation不执行隐式类型转换,并且会进入错误状态。