C++ 解释当整数变量的十进制值传递时cin是如何工作的 inta,b; cin>>a>>b; 它是这样写的: 空格/制表符/换行符(如果有的话,只使用) 数字直到不同的东西(在你的例子中是点)并将它们解析为数字

C++ 解释当整数变量的十进制值传递时cin是如何工作的 inta,b; cin>>a>>b; 它是这样写的: 空格/制表符/换行符(如果有的话,只使用) 数字直到不同的东西(在你的例子中是点)并将它们解析为数字,c++,C++,所以a变成3 然后,当它试图读取第二个数字时,它仍然位于,但“点”与空格和数字不同,因此它不使用任何字符,并将0分配给b并设置故障位 感谢您的支持: 在C++03之前(包括C++03),代码的行为尚未定义。流在上停止。从C++11开始b设置为0;在此之前,它没有被修改。目前,您在失败案例中读取其值,这是粗心的 一个很好的解决办法就是总是写一些 (until C++11) If extraction fails (e.g. if a letter was entered where a digit

所以
a
变成
3

然后,当它试图读取第二个数字时,它仍然位于
,但“点”与空格和数字不同,因此它不使用任何字符,并将
0
分配给
b
并设置故障位

感谢您的支持:


在C++03之前(包括C++03),代码的行为尚未定义。流在
上停止。从C++11开始
b
设置为0;在此之前,它没有被修改。目前,您在失败案例中读取其值,这是粗心的

一个很好的解决办法就是总是写一些

(until C++11) If extraction fails (e.g. if a letter was entered where a digit is expected), value is left unmodified and failbit is set.    
(since C++11) If extraction fails, zero is written to value and failbit is set. 

true
分支上,保证已将值写入
a
b
输入的是而不是十进制值;它是一个文本字符串,代码将该文本字符串转换为整数值。那么,字符串
“3.5”
表示的整数值是多少?它是3,就像输入是
“35”
:翻译文本的代码读取尽可能多的文本,然后停止。之后会发生什么取决于是什么导致翻译停止。如果它击中了一个空白字符,一切正常。如果它击中了其他东西(在本例中,是a
),你就有麻烦了。

afaik,即b在读取后被单位化是不正确的。在代码示例中,尝试将b初始化为num。。。读过之后,它就变成了0@tobi303:是的,C++11确实会将该值设置为0。(就我个人而言,我更喜欢这方面的先前标准)。未定义的行为是未定义的。对于相同的输入,您可能会得到不同的输出集。看一看
(until C++11) If extraction fails (e.g. if a letter was entered where a digit is expected), value is left unmodified and failbit is set.    
(since C++11) If extraction fails, zero is written to value and failbit is set. 
if (cin >> a >> b){
    // yes, all good
} else {
    // a parsing error occurred
}