Как напечататьf символ, который всегда печатает один столбец

#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("?");
}
  

Не уверен, что вы планируете делать с непечатаемыми символами.