【问题标题】:scanf vs cin: string as integer processingscanf vs cin:字符串作为整数处理
【发布时间】: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


【解决方案1】:

对于 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 不等于81016 与调用setbase(resetiosflags(ios_base::basefield)) 相同。 cin 的输入将被读取为 C 文字,这意味着 0 的前缀是八进制,0x 是十六进制,没有前缀是十进制。

【讨论】:

  • 您介意将cin >> setbase(0) >> n; 添加到您的答案中吗?
猜你喜欢
  • 1970-01-01
  • 2012-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-24
  • 2011-02-13
  • 2023-03-08
  • 2021-01-05
相关资源
最近更新 更多