我有一个输入字符串" 0100"
为什么scanf("%i", &n);
会返回64和cin >> n
;给我100?为什么cin以十进制值表示,scanf以八进制表示?
答案 0 :(得分:7)
对于
i
说明符:任意数量的数字,可选地前面带有符号(+
或-
)。 默认情况下采用的十进制数字(0-9
),但0
前缀会引入八进制数字(0-7
)和{{1引入十六进制数字(0x
)。 - scanf - C++ Reference
由于您使用0-f
作为前缀100
,因此它被读作八进制而不是十进制。
您是否介意将
0
添加到您的答案中? - Nicky C
cin >> setbase(0) >> n
* 致电// cin input: 0100
// base | n ='s
// ----------------------
cin >> setbase(0) >> n // *see below | 64
cin >> setbase(8) >> n // octal | 64
cin >> setbase(10) >> n // decimal | 100
cin >> setbase(16) >> n // hexadecimal | 256
,其中setbase( x )
不等于x
,8
或10
与调用16
相同。对setbase(resetiosflags(ios_base::basefield))
的输入将被视为cin
文字,意味着C
的前缀为八进制,0
将为十六进制,前缀不为十进制。
子>