Дополнительно
Что такое спецификатор формата printf для bool?
Начиная с ANSI C99 есть _Bool
или bool
через stdbool.h
. Но есть ли также спецификатор формата printf
для bool?
Я имею в виду что-то вроде этого псевдокода:
bool x = true;
printf("%B\n", x);
который будет печатать:
true
409
8
Там нет. Но поскольку любой интегральный тип, более короткий, чем
int
, повышается доint
при передаче к вариационным аргументамprintf ()
, вы можете использовать% d
:Но почему бы нет
или лучше
или даже лучше
вместо?
Для була нет спецификатора формата. Вы можете распечатать его, используя некоторые из существующих спецификаторов для печати интегральных типов, или сделать что-то более причудливое:
ANSI C99 / C11 не включает дополнительный спецификатор преобразования printf для
bool
.Но библиотека GNU C предоставляет API для добавления пользовательских спецификаторов.
Пример:
Поскольку это расширения glibc, GCC предупреждает об этом пользовательском спецификаторе:
& Лт; pre > $ gcc -Wall -g main.c -o main main.c: в функции «main»: main.c:34:3: предупреждение: неизвестный символ типа преобразования «B» в формате [-Wformat =] r = printf («Результат:% B \ n», b) ; ^ main.c: 34: 3: предупреждение: слишком много аргументов для формата [-Wformat-extra-args] & Лт; / pre >
Вывод:
& Лт; pre > $ ./ основной Результат: ложный (написано 21 символ) $ ./ основной 1 Результат: правда (написано 20 символов) & Лт; / pre >
В традиции
itoa ()
:Вы не можете, но вы можете напечатать 0 или 1
источник
Я предпочитаю ответ от https://stackoverflow.com/questions/7617479/best-way-to-print-the-result-of-a-bool-as-false-or-true-in-c, просто как
Чтобы просто напечатать 1 или 0 на основе логического значения, которое я только что использовал:
Особенно полезно с флагами
Если вам нравится C ++ лучше, чем C, вы можете попробовать это: