2011-05-21 52 views
3

當我打印%c格式的字符並且字符不可打印如'\ 0'時,則不存在打印輸出列。如果我使用%1c,則相同。或%1.1c。有沒有辦法強制printf輸出'\ 0'列?如何打印總是打印一列的字符

我正在做一些大的printf的,我想列匹配。

+1

您是否也遇到了其他字符的問題?還是隻有\ 0?在後者的情況下,打印'(c =='\ 0'?'':c)'。 – GolezTrol 2011-05-21 15:13:03

+0

@Golez在喬治的回答下看到我的第二條評論。 – grok12 2011-05-21 18:05:30

回答

5

沒有什麼可以爲printf做。但是你可以用isprint過濾的printf的參數

printf("%c", (isprint(c) ? c : ' ')); 
+0

Thx,George。這對我行得通。我試圖使用宏,但無法使其工作。得到這些消息:'subs.c:40:警告:格式太少的參數 subs.c:40:錯誤:預期表達式'之前','令牌 subs.c:40:錯誤: '***我永遠不會想出迷你Markdown *** – grok12 2011-05-21 16:11:36

+0

我認爲宏不起作用,因爲isprint是一個宏,你不能嵌套宏。 (這是一個猜測。)現在我正在使用#define N(c)(c =='\ 0'?'\\':c)爲\'0打印\。我喜歡這個,因爲它的輸入很短,並且讓我看到字符串上的終止字符,而不會混淆其他非printables。我喜歡這個。 – grok12 2011-05-21 18:04:05

0

您可以使用isprint函數檢查字符是否可以先打印。

if(isprint(c)) { 
    printf("%c", c); 
} 
else { 
    print("?"); 
} 

不知道你打算如何處理不可打印的字符。

2

如何寫

printf("%c",(c<' ')?' ':c); 

您可以輕鬆地把它放進一個#define

+0

bitmask,我給你評論+1建議一個宏。在接受的答案下查看我的第二條評論。 – grok12 2011-05-21 18:07:02

1

你可以改變字符參數

isgraph(C)? c:''