c - 为什么 %d 代表整数?

我知道这听起来并不高效,但我正在寻找一种方法来记住 printf 调用的所有格式代码。 %s, %p, %f 都是显而易见的,但是我不明白 %d 是从哪里来的从。 %i 是否已经被其他东西占用了?

最佳答案

它代表“decimal”(以 10 为底),而不是“整数”。您可以使用 %x 在 hexadecimal 中打印(基数 16)和 %o 在 octal 中打印(基地 8)。整数可以是这些基数中的任何一个。

printf() 中,您可以使用 %i 作为 %d 的同义词,如果您更愿意使用“整数”来代替“十进制”,但通常首选 %d,因为它更具体。

在输入时,使用 scanf(),您也可以同时使用 %i%d%i 表示将其解析为任何基数的整数(八进制、十六进制或十进制,如 00x 前缀所示),而 %d 表示将其解析为十进制整数。

以下是所有这些方法的示例:

#include <stdio.h>

int main() {
  int out = 10;
  int in[4];

  printf("%d %i %x %o\n", out, out, out, out);
  sscanf("010 010 010 010", "%d %i %x %o", &in[0], &in[1], &in[2], &in[3]);
  printf("%d %d %d %d\n", in[0], in[1], in[2], in[3]);
  sscanf("0x10 10 010", "%i %i %i", &in[0], &in[1], &in[2]);
  printf("%d %d %d\n", in[0], in[1], in[2]);

  return 0;
}

因此,如果您希望输入基数依赖于前缀,则应仅使用 %i;如果要固定输入基数,则应使用 %d%x%o。特别是,前导 0 将您置于八进制模式这一事实可以 catch 您。

https://stackoverflow.com/questions/13409014/

相关文章:

xml - 在 Eclipse 中格式化 XML 代码

c# - 文件大小格式提供程序

objective-c - 将秒整数转换为 HH :MM, iPhone

python - 在 Python 中的文件末尾声明函数

java - 在 SimpleDateFormat 模式字符串中使用字母字符

c - 如何在 C 中使用逗号作为千位分隔符来格式化数字?

java - 将 BigDecimal 格式化为最多 2 个十进制数字的字符串,在小数部分删除 0

mysql - 如何在 MySQL 数据库中存储电话号码?

objective-c - 将字符串转换为 NSDate

excel - 如何在 Excel 中将单元格的字节格式设置为 KB、MB、GB 等?