我知道这听起来并不高效,但我正在寻找一种方法来记住 printf
调用的所有格式代码。 %s
, %p
, %f
都是显而易见的,但是我不明白 %d
是从哪里来的从。 %i
是否已经被其他东西占用了?
最佳答案
它代表“decimal”(以 10 为底),而不是“整数”。您可以使用 %x
在 hexadecimal 中打印(基数 16)和 %o
在 octal 中打印(基地 8)。整数可以是这些基数中的任何一个。
在 printf()
中,您可以使用 %i
作为 %d
的同义词,如果您更愿意使用“整数”来代替“十进制”,但通常首选 %d
,因为它更具体。
在输入时,使用 scanf()
,您也可以同时使用 %i
和 %d
。 %i
表示将其解析为任何基数的整数(八进制、十六进制或十进制,如 0
或 0x
前缀所示),而 %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/