scanf vs cin:字符串作为整数处理

Val*_*ina 4 c++ scanf cin visual-c++-2010

我有一个输入字符串"0100"

为什么scanf("%i", &n);返回64和cin >> n; 给我100?为什么cin以十进制值表示,scanf以八进制表示?

Jon*_*nly 7

对于说明i符:任意数量的数字,可选地以符号(+-)开头.默认情况下假定的十进制数字(0-9), 0 前缀引入八进制数字(0-7),并0x引入十六进制数字(0-f).- scanf - C++参考

由于你以100a 为前缀,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
Run Code Online (Sandbox Code Playgroud)

* 呼叫setbase( x )在哪里x不相等8,1016与呼叫相同setbase(resetiosflags(ios_base::basefield)).如果输入cin将被读作C文字,意味着前缀为0八进制,0x则为十六进制,没有前缀为十进制.