为什么printf(“%%”)只打印一个百分号(%)符号?
当我运行这个下面的代码:为什么printf(“%%”)只打印一个百分号(%)符号?
#include<stdio.h>
#include<conio.h>
void main(){
clrscr();
printf("%%");
getch();
}
我拿到%作为输出?
这个逻辑背后的原因是什么?
这就是printf
的作用:它是打印的格式(F为格式化)。它使用%
作为格式化字符。它是唯一的保留字符,需要转义以表示它自己,即%%
。有关格式http://www.cplusplus.com/reference/cstdio/printf/的更多信息,请参阅手册。
P.S.不要将不属于程序一部分的字符串作为第一个参数。要打印由用户输入的字符串msg,请执行printf(%s,msg);
,否则您的代码中将出现安全漏洞。
从标准ISO/IEC 9899:1999(E)
7.19.6.1
每种转换规范由字符%引入。
转换标识符和它们的含义如下:
% - %字符写入。没有参数被转换。完整的 转换规范应为%%。
对于C printf,%
是一个特殊字符,通常表示要在该位置替换的参数:printf("Hello, %s!\n", "world!");
产生“Hello,world”。根据要输出的数据,可以在%之后添加许多不同的内容。所以这留下了“如果我想打印百分比符号怎么办”的问题?
解决方案:使用%%
。
特殊转义字符\
也是如此。 “\ n”表示打印新行。如果要实际打印的斜线,你必须把它两次\\
\是C和C++的一部分,%是printf的一部分,尽管它们以相似的方式工作。 – 2014-08-28 06:16:02
%进入格式说明符。例如 。 当我们写printf("%d",20);
时,它会打印20而不是%d。导致编译器将%视为格式说明符。在编译器的思想中,%的含义有点特殊。 所以如果你想要“%”应该是输出,那么你必须写printf("%%")
。这里第一个%符号将会抑制%格式说明符的含义,并将输出%作为输出。
感谢您的解决方案。 – 2014-08-28 06:35:17
因为这就是它所做的。 http://stackoverflow.com/a/1860164/242520 – 2014-08-28 06:08:30
一个逃脱另一个,简单:) – 2014-08-28 06:10:44
一些快速的方法来打印他们两个:'printf(“\%\%”);','printf(“ %c','%','%');','printf(“%s”,“%%”);'。 – 2014-08-28 06:15:42