我有一个输入字符串 "0100"
为什么 scanf("%i", &n);
返回64,而 cin >> n
返回100?为什么 cin 会认为是十进制数,而 scanf 是八进制的?
我有一个输入字符串 "0100"
为什么 scanf("%i", &n);
返回64,而 cin >> n
返回100?为什么 cin 会认为是十进制数,而 scanf 是八进制的?
i
,任意数量的数字,可选择由正负号(+
或-
)开头。默认情况下为十进制数字(0-9
),但是前缀为0
会引入八进制数字(0-7
),而0x
则引入十六进制数字(0-f
)。- scanf - C++ Reference
由于你在100
之前加了前缀0
,因此它被读作八进制而不是十进制。
cin >> setbase(0) >> n
添加到您的答案中是否可以?- Nicky C// 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
表示八进制,0x
表示十六进制,无前缀表示十进制。cin >> setbase(0) >> n;
吗? - user2486888
scanf
也可以按十进制工作。"%i"的意思是"C整数字面值规则"。 - Igor Tandetnik