#c #printf
#c #printf
Вопрос:
Когда я печатаю символ в формате%c, а символ не выводится как ‘ 0’, тогда в распечатке нет столбца. То же самое, если я использую . Или %1.1c. Есть ли способ заставить printf выводить столбец для ‘ 0’?
Я делаю несколько больших файлов printf и хочу, чтобы столбцы совпадали.
Комментарии:
1. У вас такая проблема и с другими символами? Или только с ? В последнем случае выведите
(c == ''?' ':c)
.2. @Golez смотрите мой 2-й комментарий под ответом Джорджа.
Ответ №1:
Вы ничего не можете сделать для printf. Но вы можете использовать isprint для фильтрации аргументов printf
printf("%c", (isprint(c) ? c : ' ' ));
Комментарии:
1. Спасибо, Джордж. У меня это работает. Я пытался использовать макрос, но не смог заставить его работать. Получил эти сообщения:
subs.c:40: warning: too few arguments for format subs.c:40: error: expected expression before ‘,’ token subs.c:40: error: expected statement before ‘)’ token
*** Я никогда не пойму, что такое мини-уценка ***2. Я думаю, что макрос не сработал, потому что isprint — это макрос, и вы не можете вставлять макросы. (Это предположение.) Теперь я использую #define N(c) (c==» ? ‘\’ : c) который печатает для ». Мне нравится это, потому что оно короткое для ввода и позволяет мне видеть завершающий символ в строках без путаницы с другими непечатаемыми файлами. Мне это нравится.
Ответ №2:
Как насчет написания
printf("%c",(c<' ')?' ':c);
Вы можете легко поместить это в #define
.
Комментарии:
1. битовая маска, я даю тебе комментарий 1 за предложение макроса. Смотрите мой 2-й комментарий под принятым ответом.
Ответ №3:
вы могли бы изменить символьный аргумент на
isgraph(c) ? c : ‘ ‘
Ответ №4:
Вы могли бы использовать isprint
функцию, чтобы сначала проверить, доступен ли символ для печати.
if(isprint(c)) {
printf("%c", c);
}
else {
print("?");
}
Не уверен, что вы планируете делать с непечатаемыми символами.