Что за% c в printf (), если мы не хотим ничего печатать в этом месте? - PullRequest
0 голосов
/ 24 марта 2019

Я пишу код, в котором определенный символ должен отображаться на основе некоторого условия, и ничего не должно отображаться (даже пробел), если это условие не выполняется. Я использую printf() с %c спецификатором преобразования. Когда я хочу ничего не печатать, я передаю '\0' для %c, но это печать пробела. Что я должен пройти для моей цели?

Ответы [ 5 ]

3 голосов
/ 24 марта 2019

Нет значения, которое может быть передано для аргумента, соответствующего спецификации %c, в printf, что не приводит к печати ни одного символа.

Чтобы не печатать символ, вы не должны выполнятьprintf со спецификацией %c.

2 голосов
/ 24 марта 2019

Вы можете сделать %s с пустой строкой без символов, например:

printf("foo%sbar", condition ? "+" : "");

Если символ находится в переменной char, тогда:

printf("foo%.1sbar", condition ? &ch : "");
0 голосов
/ 25 марта 2019

для печати пробела (фактически ничего не печатая) Предложить:

printf( "%c", ' ' );

-или-

putc( ' ', stdout );

-или-

putchar( ' ' );

-или-

fputc( ' ', stdout );

Или, чтобы буквально ничего не печатать, вы можете использовать escape-последовательность ANSI:

printf( "/x2b[1C\n" );

Который переместит курсор вправо на 1 пробел, ничего не печатая

0 голосов
/ 24 марта 2019

Вы можете использовать управляющие коды ASCII, например, BEL: '\a'. Это может сбить с толку пользователей, которые могут услышать ложный звук, и других программистов, которые могут не понять, почему код пытается привлечь внимание пользователя.

Гораздо лучше написать условие с двумя различными printf() утверждениями. Это решение делает код наиболее читабельным и обслуживаемым.

0 голосов
/ 24 марта 2019

Вы можете разделить свое утверждение, например, если у вас есть такое утверждение:

printf(" %d  %c %s \n, par1, par2 par3);

Вы можете разделить его следующим образом:

printf("%d", par1);
if( a_condition_is_true) printf("%c", par2);
printf("%s\n", par3);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...