Что такое спецификатор формата printf для bool?

Для удаления я просто использовал это:

$str = preg_replace('~<MY_TAG(.*?)</MY_TAG>~Usi', "", $str);

Использование ~ вместо / для устранения разграниченных ошибок, вызванных обратным слэшем в конце тега, который, казалось, был проблемой даже с побегом. Устранение> из тега открытия допускает атрибуты или другие символы и по-прежнему получает тег и все его содержимое.

Это работает только там, где вложение не является проблемой.

Usi означают U = Ungreedy, s = включить символы линии, i = регистр нечувствителен.

378
задан maxschlepzig 25 June 2013 в 20:50
поделиться

7 ответов

Нет. Но поскольку любой целочисленный тип, меньший чем int, повышается до int при передаче его в printf() с переменными аргументами, вы можете использовать %d:

bool x = true;
printf("%d\n", x); // prints 1

Но почему бы и нет

printf(x ? "true" : "false");

или лучше

printf("%s", x ? "true" : "false");

или даже лучше

fputs(x ? "true" : "false", stdout);

вместо?

593
ответ дан 25 June 2013 в 20:50
поделиться

Для bool нет спецификатора формата. Вы можете распечатать его, используя некоторые из существующих спецификаторов для печати целочисленных типов или сделать что-то более причудливое:

 printf("%s", x?"true":"false");
39
ответ дан Ivaylo Strandjev 25 June 2013 в 20:50
поделиться

В традиции itoa():

#define btoa(x) ((x)?"true":"false")

bool x = true;
printf("%s\n", btoa(x));
13
ответ дан jxh 25 June 2013 в 20:50
поделиться

Вы не можете, но вы можете напечатать 0 или 1

_Bool b = 1;
printf("%d\n", b);

источник

4
ответ дан Community 25 June 2013 в 20:50
поделиться

Я предпочитаю ответ из Лучший способ напечатать результат bool как «false» или «true» в c? , так же как

printf("%s\n", "false\0true"+6*x);
  • x == 0, "false \ 0true" + 0 "означает" false ";
  • x == 1," false \ 0true "+ 6" означает "true";
2
ответ дан Community 25 June 2013 в 20:50
поделиться

Чтобы просто напечатать 1 или 0 на основе логического значения, которое я только что использовал:

printf("%d\n", !!(42));

Особенно полезно с флагами:

#define MY_FLAG (1 << 4)
int flags = MY_FLAG;
printf("%d\n", !!(flags & MY_FLAG));
2
ответ дан Tarion 25 June 2013 в 20:50
поделиться

Если вам нравится C ++ лучше, чем C, вы можете попробовать это:

#include <ios>
#include <iostream>

bool b = IsSomethingTrue();
std::cout << std::boolalpha << b;
1
ответ дан Arsen Y.M. 25 June 2013 в 20:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: