c中带有百分比字符的奇怪格式说明符

Strange format specifier in c with percentage character

我有一个与 c 示例中的 "printf" 指令相关的问题:

printf("Percentage character: %%",10);

输出正确:百分比字符:%

为什么是格式说明符 (%%)?那边那个10是怎么回事?为什么编译器说 printf 的参数太多?

我尝试以另一种方式显示百分比字符:

printf("Percentage character: %c",putch(37));

然而,输出并不是很好:%Percentage 字符:%

为什么句子前面会出现百分号?

%% 转换规范用于 printf 以打印单个 %(不转换任何参数)。

例如:

 printf("10%%\n");

打印

 10%

现在在你的例子中:

printf("Percentage character: %%",10);

没问题,但是 printf 第二个参数被忽略了。相当于:

printf("Percentage character: %%");

关于你的最后一个例子:

printf("Percentage character: %c",putch(37));

printfputch 都将字符写入标准输出,因此首先对 putch 求值并写入一个字符,然后 printf 将写入一系列字符到标准输出。使用:

     printf("Percentage character: %c", 37);

如果您不想要第一个 % 或者更好:

     printf("Percentage character: %c", '%');

如果你想独立于字符集(37在ASCII中是%,但在其他字符集上可以有其他值)。

为什么格式说明符 (%%)

想一想您想要打印 %printf() 的情况。如果你只是给出一个 % 它将被视为某种格式说明符的一部分。所以要打印 % 你需要做 %%


那 10 是怎么回事?为什么编译器说 printf 的参数太多?

10 只是 printf() 的另一个参数。由于没有匹配该参数的格式说明符,因此您将收到 too many arguments for printf 消息


在这

printf("Percentage character: %c",putch(37));

putch() 来自标准库 conio.h 并且在 Linux 上不受支持,正如 Wikipedia 所说,它没有被 C 标准定义。