2011-04-05 47 views
0

可能重複:
C output question…C的輸出的問題

爲什麼其O/P是%% ??

int main(void) 
{ 
    printf("%%%\n"); 
    return 0; 
} 

雖然下面的程序o/p是%?

int main(void) 
{ 
    printf("%%%"); 
    return 0; 
} 

可以告訴我實際的區別在哪裏?

+2

當你運行它會發生什麼? – David 2011-04-05 12:31:32

+2

你有沒有想過自己嘗試一下? – Chris 2011-04-05 12:31:57

+0

您是否想過閱讀您正在使用的功能的文檔? – DevSolar 2011-04-05 12:32:49

回答

4

這是未定義的行爲。 C99州的第7.19.6.1/9條規定:

如果轉換規範無效,則行爲未定義。

並且前面的部分都沒有允許空格的轉換說明符。它們僅限於來自集合diouxXfFeEgGaAcsPn%的字符。

+0

空格是轉換說明符的有效修飾符,但'%'在說明符中不是有效的下一個字符。 – 2011-04-05 13:42:39

+0

@R:是的,該空格對於有符號轉換是一個有效的修飾符,但正如您所說,'%'不是一個有符號轉換。我認爲標準中的一個段落說'%%'必須是_exactly_這種形式(不允許修飾符)。 – paxdiablo 2011-04-06 00:07:19