由於在C下面的程序,%%在printf中做了什麼?
#include <stdio.h>
int main()
{
printf(" \"Books %% OR %% apparels\"");
getchar();
return 0;
}
該程序打印書籍%或%服裝, 我想知道%%的意義,因爲它看起來是不必要的。
由於在C下面的程序,%%在printf中做了什麼?
#include <stdio.h>
int main()
{
printf(" \"Books %% OR %% apparels\"");
getchar();
return 0;
}
該程序打印書籍%或%服裝, 我想知道%%的意義,因爲它看起來是不必要的。
%
指示用於格式化傳遞給printf()
的變量的格式轉義序列。
所以你必須逃避它打印%
字符。
http://en.cppreference.com/w/c/io/fprintf
如果更換%%
到%
,這樣
#include <stdio.h>
int main (int argc, char *argv[]) {
printf(" \"Books % OR % apparels\"");
return 0;
}
有兩種轉義序列printf()
:
"% O"
[guesswork]這不會產生一個有效的轉義序列,因此printf()
忽視它並按原樣打印它。
"% a"
printf()
將努力讓從空參數列表float
並打印爲「十六進制浮點,小寫字母」(%a
,見上面的網頁)。由於C調用慣例(免責聲明:我不是這方面的專家),因此會使用內存中的一些垃圾並解釋結果。
其實我的編譯器(gcc 4.4.3)發出警告兩個:
$ gcc a.c
a.c: In function ‘main’:
a.c:3: warning: unknown conversion type character ‘O’ in format
a.c:3: warning: too few arguments for format
我查過了,謝謝。 但是,我對此感到困惑: 如果我們用「%」替換「%%」 輸出結果爲「Books%or -0x1.a9288p-8pparels」 爲什麼這種行爲? –
編譯器無關與此有關。閱讀'man printf'。 – bmargulies
嘗試'man printf' –
這是一個轉義序列。由於%在printf類型函數中具有特殊意義,爲了打印文字%,您鍵入%%以防止它被解釋爲開始轉換fmt。 – gnometorule