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

4

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

为什么 scanf("%i", &n); 返回64,而 cin >> n 返回100?为什么 cin 会认为是十进制数,而 scanf 是八进制的?


使用"%d",然后scanf也可以按十进制工作。"%i"的意思是"C整数字面值规则"。 - Igor Tandetnik
1个回答

7
对于说明符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不等于81016,相当于调用setbase(resetiosflags(ios_base::basefield))。此时对于cin的输入将被读为一个C字面量,即前缀为0表示八进制,0x表示十六进制,无前缀表示十进制。

你介意在你的回答中加入 cin >> setbase(0) >> n; 吗? - user2486888

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接