2015-12-05 36 views
1

我在AC實例涉及到的「printf」指令一個問題:奇怪的格式說明在C有個字符

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

輸出是正確的:百分比字符:%

這是爲什麼格式-specifier(%%)?那邊那10塊是什麼?爲什麼編譯器說printf的參數太多?

我試圖顯示以另一種方式的百分比字符:

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

但是,輸出是不是真的很好:%比例charcater:%

爲什麼會出現這句話之前這一比例性格嗎?

+1

您是否仔細閱讀過[printf](http://man7.org/linux/man-pages/man3/printf.3.html)的文檔?您是否在編譯器中啓用了所有警告和調試信息('gcc -Wall -Wextra -g')? –

+2

http://stackoverflow.com/questions/1860159/how-to-escape-the-sign-in-cs-printf – SomeWittyUsername

回答

2

%%轉換規範用於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文件,但可以有另值在其他字符集上)。

+0

謝謝!你能告訴我爲什麼第二個輸出在句子前多加一個百分點? –

+0

@ RevnicRobert-Nick,額外的'%'可能是因爲對'putch(37)'的評價。 – Haris

+0

@ RevnicRobert-Nick正確的調用是'printf(「百分比字符:%c」,37);'(在ASCII中),'putch'也將一個字符寫入'stdout'。 – ouah

2

這是爲什麼格式說明符(%%)

思考的情況下,你會希望通過printf()打印%。如果你只是給一個%它將被視爲某種格式說明符的一部分。因此,要打印%你需要做的%%


什麼是與10那邊?爲什麼編譯器說,是printf的參數太多?

10只是printf()的另一個參數。由於沒有格式說明,以匹配參數,使您得到too many arguments for printf消息


在這種

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

putch()來自標準庫conio.h,它不支持在Linux上,正如Wikipedia所說的那樣,它不是由C標準定義的。

+0

非常感謝! –