c - 如何在 C 中使用 scanf 读取前导 0 作为一个 int 的数字?

标签 c

我正在使用 C 使用 scanf("%i", &myInt) 读取整数数据。我知道对于这个特定的输入,数据总是三位数。但是,有时我需要读取前导 0 的数字,例如 001 或 078。当 scanf() 读取前导零的数字时,它不会获取后续数字。例如,当我读取 078 scanf 读取 7 那么下一个 scanf 将读取 8。我希望 scanf 读取 78。有人可以吗告诉我如何正确地做到这一点?这是一个代码示例:

int x;

while (scanf("%i", &x) != EOF) {

   //do operations on each of the digits

}

最佳答案

我怀疑您可能正在使用 %i 转换说明符,它遵循 C 约定,例如 0x 表示十六进制,前导零表示八进制。如果输入是 078 并且使用了 %i,那么只有 07 匹配,因为 8 不是八进制数字.使用 %d 扫描十进制整数。

%i 中的 i 并不意味着“每当您需要将 i)nteger 转换为类型 i)nt 时,请联系我”。

仅当三位数字后跟我们需要从扫描中排除的更多数字时才需要宽度。例如,我们可以使用格式字符串 "%4d%2d%d" 将作为 "20140417" 给出的日期转换为三个整数。最后一个 %d 可以是 %2d 但不一定是。这些值不指定要提取的位数,而是指定最大字段宽度:转换最多需要那么多字符(包括可能的加号或减号)。对于输入 -1234%3d 转换将采用 -12,并保留 34。对于输入 1$%3d 将只取 1 而保留 $,因为它不是t 十进制数。

关于c - 如何在 C 中使用 scanf 读取前导 0 作为一个 int 的数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23123059/

相关文章:

c - 如何在 Turbo C IDE 中查看程序的输出?

c - C 中与 ‘operator*’ (操作数类型为 ‘node’ )不匹配

c - 当宏在结构数组中时,如何将宏的名称转换为文字字符串?

c - C 结构中的运行时条件字段

c - 如何在 C 中顺序解析 gzip 压缩的文本文件而不先完全解压缩

c++ - 将 'const' 添加到指针可以帮助优化吗?

c - fastcgi 请求的输入流中缺少字符

c - visual studio 2012无法编译用VS 2013制作的解决办法

java - 是否有任何基于主观逻辑的信任指标的实现?

c - 如何在C中正确引用?我似乎没捕获重点