#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
printf("\%\n");
int x = 10;
printf("\%d\n", x);
return 0;
}
(第一行不打印) 那麼,什麼是被轉義序列做了什麼?如果它在\之後沒有讀取%,則不應該在第二個printf語句中打印10。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
printf("\%\n");
int x = 10;
printf("\%d\n", x);
return 0;
}
(第一行不打印) 那麼,什麼是被轉義序列做了什麼?如果它在\之後沒有讀取%,則不應該在第二個printf語句中打印10。
\%
不是有效的轉義序列。你的編譯器應該拋出一個警告,像
[Warning] unknown escape sequence: '\%' [enabled by default]
您需要%%
以其他方式打印%
它可能會或可能無法打印。
它可能會或可能不會被打印。 –
@RagingScallion;呃...我不知道。 – haccks
[Now you do](http://coliru.stacked-crooked.com/a/be25f263a508785a) –
有處理這裏的兩個層次:
字符串文字的解析。這是\
生效的地方。 \n
被換行符替換,其他轉義也發生。
printf()
機制。這個只處理%
作爲特殊字符,並解析它後面的任何內容以便格式化它的一個參數。
隨着\%
你混用這兩個,在\
(如果%
被抑制或不)無論發生什麼事,(2)不會注意到\
,因爲它是「吃掉」(1)。
字符'%'的正確轉義序列是'%%'。 – TypeIA
[你如何在C中顯示「%5d」?](http://stackoverflow.com/questions/4772598/how-do-you-display-5d-in-c) – devnull
@dvnrrs'%% '不是一個轉義序列,它是一個_conversion說明符,對於printf函數族來說是唯一的。不同於所有C字符串通用的轉義序列(如'\ n')。 – Lundin