2013-09-24 146 views
-4

由於在C下面的程序,%%在printf中做了什麼?

#include <stdio.h> 

int main() 
{ 
    printf(" \"Books %% OR %% apparels\""); 
    getchar(); 
    return 0; 
} 

該程序打印書籍%或%服裝, 我想知道%%的意義,因爲它看起來是不必要的。

+0

編譯器無關與此有關。閱讀'man printf'。 – bmargulies

+0

嘗試'man printf' –

+4

這是一個轉義序列。由於%在printf類型函數中具有特殊意義,爲了打印文字%,您鍵入%%以防止它被解釋爲開始轉換fmt。 – gnometorule

回答

2

%指示用於格式化傳遞給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()

  1. "% O"

    [guesswork]這不會產生一個有效的轉義序列,因此printf()忽視它並按原樣打印它。

  2. "% 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 
+0

我查過了,謝謝。 但是,我對此感到困惑: 如果我們用「%」替換「%%」 輸出結果爲「Books%or -0x1.a9288p-8pparels」 爲什麼這種行爲? –