C++ scanf vs cin:字符串作为整数处理
我有一个输入字符串“0100” 为什么C++ scanf vs cin:字符串作为整数处理,c++,scanf,cin,visual-c++-2010,C++,Scanf,Cin,Visual C++ 2010,我有一个输入字符串“0100” 为什么scanf(“%i”和&n)返回64和cin>>n;给我100?为什么cin用十进制值思考,而scanf用八进制值思考 对于i说明符:任意数量的数字,可以选择前面有符号(+或-)。 默认情况下采用十进制数字(0-9),但前缀引入八进制数字(0-7),而0x引入十六进制数字(0-f) 由于您在100前面加了0前缀,因此它被读取为八进制而不是十进制。 更新: 您是否介意在您的答案中添加cin>>挫折(0)>>n尼基C *调用setbase(x)其中x不等于8,
scanf(“%i”和&n)
返回64和cin>>n
;给我100?为什么cin用十进制值思考,而scanf用八进制值思考
对于i
说明符:任意数量的数字,可以选择前面有符号(+
或-
)。
默认情况下采用十进制数字(0-9
),但前缀引入八进制数字(0-7
),而0x
引入十六进制数字(0-f
)
由于您在100
前面加了0
前缀,因此它被读取为八进制而不是十进制。
更新:
您是否介意在您的答案中添加
cin>>挫折(0)>>n
尼基C
*调用setbase(x)
其中x
不等于8
,10
或16
与调用setbase(resetiosglags(ios_base::basefield))
是一样的。其中,cin
的输入将被读取为C
文本,这意味着0
的前缀将是八进制,0x
将是十六进制,并且没有前缀将是十进制。
使用
%d
,然后scanf
也可以用十进制<代码>%i本质上是“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