2011-07-13 72 views
1

我試圖逃跑打印字符使用此代碼字符或字符串:如何將轉義字符打印爲字符?

while((c = fgetc(fp))!= EOF) 
{ 
    if(c == '\0') 
    { 
     printf(" \0"); 
    } 
    else if(c == '\a') 
    { 
     printf(" \a"); 
    } 
    else if(c == '\b') 
    { 
     printf(" \b"); 
    } 
    else if(c == '\f') 
    { 
     printf(" \f"); 
    } 
    else if(c == '\n') 
    { 
     printf(" \n"); 
    } 
    else if(c == '\r') 
    { 
     printf(" \r"); 
    } 
    else if(c == '\t') 
    { 
     printf(" \t"); 
    } 
    else if(c == '\v') 
    { 
     printf(" \v"); 
    } 
} 

但是當我嘗試它,它實際打印的轉義序列。

+3

使用雙斜槓''\\ –

回答

11

轉義斜線(使用" \\a"),這樣它們就不會被專門解釋。您也可以至少使用查找表或switch

switch (c) { 
case '\0': 
    printf(" \\0"); 
    break; 
case '\a': 
    printf(" \\a"); 
    break; 
/* And so on. */ 
} 
+1

不要你的意思'的printf(」 \\ 0「);'等等? – Praetorian

+0

@Praetorian是的:))我複製粘貼,謝謝:-) – cnicutar

+0

感謝您的幫助 – user798774

3

爲此,我們需要使用雙反斜槓。

例子:

if(c == '\0') 
{ 
    printf(" \\0"); 
} 
else if(c == '\a') 
{ 
    printf(" \\a"); 
} 
else if(c == '\b') 
{ 
    printf(" \\b"); 
} 
else if(c == '\f') 
{ 
    printf(" \\f"); 
} 
else if(c == '\n') 
{ 
    printf(" \\n"); 
} 
else if(c == '\r') 
{ 
    printf(" \\r"); 
} 
else if(c == '\t') 
{ 
    printf(" \\t"); 
} 
else if(c == '\v') 
{ 
    printf(" \\v"); 
} 

應該爲你工作!

4

字符串文字中的反斜槓需要轉義;而不是"\0",您需要"\\0"

的查找表可能使這種痛苦少:

const char *ecs[256] = {NULL}; // assumes ASCII - may not be a valid assumption 
int c; 

ecs['\0'] = "\\0"; 
ecs['\a'] = "\\a"; 
ecs['\b'] = "\\b"; 
... 
while ((c = fgetc(fp)) != EOF) 
{ 
    if (ecs[c] == NULL) 
    printf("%c", c); 
    else 
    printf("%s", ecs[c]); 
} 

是,多數ecs條目將是NULL;折衷是我不必擔心將字符值映射到數組索引。

0

如果你想逃避內printf%d,讓您可以實際打印字符 「%d」:

printf("%%d"); 
相關問題