2014-08-28 516 views
-3

当我运行这个下面的代码:为什么printf(“%%”)只打印一个百分号(%)符号?

#include<stdio.h> 
#include<conio.h> 
void main(){ 
clrscr(); 
printf("%%"); 
getch(); 
} 

我拿到%作为输出?

这个逻辑背后的原因是什么?

+6

因为这就是它所做的。 http://stackoverflow.com/a/1860164/242520 – 2014-08-28 06:08:30

+4

一个逃脱另一个,简单:) – 2014-08-28 06:10:44

+1

一些快速的方法来打印他们两个:'printf(“\%\%”);','printf(“ %c','%','%');','printf(“%s”,“%%”);'。 – 2014-08-28 06:15:42

回答

4

这就是printf的作用:它是打印的格式(F为格式化)。它使用%作为格式化字符。它是唯一的保留字符,需要转义以表示它自己,即%%。有关格式http://www.cplusplus.com/reference/cstdio/printf/的更多信息,请参阅手册。

P.S.不要将不属于程序一部分的字符串作为第一个参数。要打印由用户输入的字符串msg,请执行printf(%s,msg);,否则您的代码中将出现安全漏洞。

1

从标准ISO/IEC 9899:1999(E)

7.19.6.1

每种转换规范由字符%引入。

转换标识符和它们的含义如下:

% - %字符写入。没有参数被转换。完整的 转换规范应为%%。

1

对于C printf,%是一个特殊字符,通常表示要在该位置替换的参数:printf("Hello, %s!\n", "world!");产生“Hello,world”。根据要输出的数据,可以在%之后添加许多不同的内容。所以这留下了“如果我想打印百分比符号怎么办”的问题?

解决方案:使用%%

特殊转义字符\也是如此。 “\ n”表示打印新行。如果要实际打印的斜线,你必须把它两次\\

Printf format stringMSDN

+0

\是C和C++的一部分,%是printf的一部分,尽管它们以相似的方式工作。 – 2014-08-28 06:16:02

1

%进入格式说明符。例如 。 当我们写printf("%d",20);时,它会打印20而不是%d。导致编译器将%视为格式说明符。在编译器的思想中,%的含义有点特殊。 所以如果你想要“%”应该是输出,那么你必须写printf("%%")。这里第一个%符号将会抑制%格式说明符的含义,并将输出%作为输出。

+0

感谢您的解决方案。 – 2014-08-28 06:35:17

相关问题