【发布时间】:2014-08-21 19:01:28
【问题描述】:
我有一个输入字符串“0100”
为什么scanf("%i", &n);返回64而cin >> n;给我100?为什么cin用十进制计算而scanf用八进制计算?
【问题讨论】:
-
使用
%d,然后scanf也可以使用十进制。%i本质上是指“C 整数文字规则”。
标签: c++ scanf cin visual-c++-2010
我有一个输入字符串“0100”
为什么scanf("%i", &n);返回64而cin >> n;给我100?为什么cin用十进制计算而scanf用八进制计算?
【问题讨论】:
%d,然后scanf 也可以使用十进制。 %i 本质上是指“C 整数文字规则”。
标签: c++ scanf cin visual-c++-2010
对于
i说明符: 任意位数,可以在前面加上符号(+或-)。 默认采用十进制数字 (0-9),但一个0前缀引入八进制数字 (0-7),0x引入十六进制数字 (@987654329 @)。 - scanf - C++ Reference
由于您在100 前加上0,因此它被读取为八进制而不是十进制。
您介意在您的答案中添加
cin >> setbase(0) >> n吗? - 尼基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; 添加到您的答案中吗?