2014-08-28 508 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

相關問題