如何在c中打印百分号(%)

Pau*_*lch 30 c operators percentage

我是C的初学者,我想知道为什么这个程序不打印%符号?

代码是:

#include<stdio.h>

main()
{
     printf("%");
     getch();
}
Run Code Online (Sandbox Code Playgroud)

C_I*_*ner 66

你的问题是你必须改变:

printf("%"); 
Run Code Online (Sandbox Code Playgroud)

printf("%%");
Run Code Online (Sandbox Code Playgroud)

或者你可以使用ASCII代码并写:

printf("%c", 37);
Run Code Online (Sandbox Code Playgroud)

:)

  • C不需要ASCII.`printf("%c",37);`不可移植. (7认同)
  • 为什么不使用''%'而不是`37`? (3认同)
  • @H2CO3 是的,但我喜欢这个答案,因为他给出了一个额外的技巧! (2认同)

mac*_*fij 16

在这个主题中没有解释为什么要打印必须键入的百分号,%%而不是例如具有百分比的转义字符 - \%.

来自comp.lang.c常见问题列表·问题12.6:

用printf打印%符号很棘手的原因是%本质上是printf的转义字符.每当printf看到一个%时,它都会预期会跟着一个字符告诉它接下来要做什么.双字符序列%%被定义为打印单个%.

要理解为什么\%不能工作,请记住反斜杠\是编译器的转义字符,并控制编译器在编译时解释源代码字符的方式.但是,在这种情况下,我们想要控制pr​​intf在运行时如何解释其格式字符串.就编译器而言,转义序列\%是未定义的,并且可能导致单个%字符.即使printf准备专门处理\,也不太可能将\和%传递给printf.

因此,必须键入printf("%%");以打印单个%的原因是printf函数中定义的内容.%是printf和\ of编译器的转义字符.


Car*_*rum 7

使用"%%".该手册页介绍了这一要求:

% 写'%'.没有参数被转换.完整的转换规范是' %%'.