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

时间:2014-08-21 19:01:29

标签: c++ scanf cin visual-c++-2010

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

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

1 个答案:

答案 0 :(得分:7)

  

对于 i 说明符:任意数量的数字,可选地前面带有符号(+-)。   默认情况下采用的十进制数字(0-9), 0 前缀会引入八进制数字0-7)和{{1引入十六进制数字(0x)。 - scanf - C++ Reference

由于您使用0-f作为前缀100,因此它被读作八进制而不是十进制。

更新

  

您是否介意将0添加到您的答案中? - Nicky 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 ,其中setbase( x )不等于x810与调用16相同。对setbase(resetiosflags(ios_base::basefield))的输入将被视为cin文字,意味着C的前缀为八进制,0将为十六进制,前缀不为十进制。