本文翻译自:What is the printf format specifier for bool?

Since ANSI C99 there is _Bool or bool via stdbool.h . 从ANSI C99开始,通过stdbool.h _Boolbool But is there also a printf format specifier for bool? 但是还有bool的printf格式说明符吗?

I mean something like in that pseudo code: 我的意思是伪代码中的内容:

bool x = true;
printf("%B\n", x);

which would print: 它将打印:

true

#1楼

参考:https://stackoom.com/question/1AcPb/bool的printf格式说明符是什么


#2楼

There is no format specifier for bool. 没有用于bool的格式说明符。 You can print it using some of the existing specifiers for printing integral types or do something more fancy: 您可以使用一些现有的用于打印整数类型的说明符来打印它,或者做一些更有趣的事情:

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

#3楼

There isn't. 没有。 But since any integral type shorter than int is promoted to int when passed down to printf() s variadic arguments, you can use %d : 但是,由于当传递给printf()的可变参数时,任何比int短的整数类型都会提升为int ,因此可以使用%d

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

But why not 但是为什么不呢

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

or better 或更好

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

or even better 甚至更好

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

instead? 代替?


#4楼

You can't, but you can print 0 or 1 您不能,但是可以打印0或1

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

source 资源


#5楼

In the tradition of itoa() : 按照itoa()的传统:

#define btoa(x) ((x)?"true":"false")bool x = true;
printf("%s\n", btoa(x));

#6楼

ANSI C99/C11 don't include an extra printf conversion specifier for bool . ANSI C99 / C11不包含用于bool的额外的printf转换说明符。

But the GNU C library provides an API for adding custom specifiers . 但是GNU C库提供了用于添加自定义说明符的API 。

An example: 一个例子:

#include <stdio.h>
#include <printf.h>
#include <stdbool.h>static int bool_arginfo(const struct printf_info *info, size_t n,int *argtypes, int *size)
{if (n) {argtypes[0] = PA_INT;*size = sizeof(bool);}return 1;
}
static int bool_printf(FILE *stream, const struct printf_info *info,const void *const *args)
{bool b =  *(const bool*)(args[0]);int r = fputs(b ? "true" : "false", stream);return r == EOF ? -1 : (b ? 4 : 5);
}
static int setup_bool_specifier()
{int r = register_printf_specifier('B', bool_printf, bool_arginfo);return r;
}
int main(int argc, char **argv)
{int r = setup_bool_specifier();if (r) return 1;bool b = argc > 1;r = printf("The result is: %B\n", b);printf("(written %d characters)\n", r);return 0;
}

Since it is a glibc extensions the GCC warns about that custom specifier: 由于它是glibc扩展,因此GCC警告该自定义说明符:

$ gcc -Wall -g    main.c   -o main
main.c: In function ‘main’:
main.c:34:3: warning: unknown conversion type character ‘B’ in format [-Wformat=]r = printf("The result is: %B\n", b);^
main.c:34:3: warning: too many arguments for format [-Wformat-extra-args]

Output: 输出:

$ ./main
The result is: false
(written 21 characters)
$ ./main 1
The result is: true
(written 20 characters)

bool的printf格式说明符是什么?相关推荐

  1. c语言输出bool,关于printf:在c中打印bool结果为’false’或’true’的最佳方法?...

    我必须编写一个程序,其中main调用其他函数来测试一系列数字(如果有的话)是否少于一个数字,如果所有系列的数字都在两个限制之间,如果有的话是负数.我的代码返回值为1表示true,0表示false表示, ...

  2. printf()中%n格式说明符

    一 遇到%n 昨天在写scanf 的输入异常处理时遇到了一个从未见过的格式说明符:%n sscanf(str, "%d %n", &v, &c) 从运行结果来看,c ...

  3. (超全,超经典)scanf()函数与printf()中的格式说明符

    1.scanf()与printf()中格式说明符几乎相同的一部分 %d 用来输入和输出int %ld 用来输入和输出long int %lld 用来输入和输出long long int %hd 用来输 ...

  4. c语言printf格式限定符,c – 1字节有符号数的printf格式

    what is the correct format for a 1 byte signed number? %hh和您选择的整数转换说明符(例如,?hhX.请参阅C11标准,§7.21.6.1p5: ...

  5. C语言Printf格式大全(各种%输出形式)

    C语言Printf格式 C中格式字符串的一般形式为: %[标志][输出最小宽度][.精度][长度]类型, 其中方括号[]中的项为可选项.各项的意义介绍如下: 1.类型类型字符用以表示输出数据的类型,其 ...

  6. C语言中%d和%i格式说明符之间的差异

        由百分比符号 (%) 形成的序列表示格式说明符,用于指定要从流中检索并存储到附加参数所指位置的数据的类型和格式.简而言之,它告诉我们要存储哪种类型的数据以及要打印哪种类型的数据.     示例 ...

  7. c语言如何让字母右对齐,C语言printf格式的输出,右对齐零填充

    转发自: 1.1标准输入和输出功能 1.1.1格式化的输入和输出功能 Turbo C2.0标准库提供了两个控制台格式的输入和输出函数printf()和 scanf(),这两个函数可以在标准输入和输出设 ...

  8. C语言521短整型输出,printf 格式输出

    #include /************************************************************************/ // //作者:flyingle ...

  9. c语言打印qword类型,c/c++开发分享c语言中数据类型BYTE,WORD和DWORD的格式说明符?...

    在 例如,如果我尝试使用"%lu"显示BPB_BytsPerSec,我会得到不同寻常的数据. printf("Bytes per Sector: %lu", b ...

最新文章

  1. 产品思维——像产品经理一样思考
  2. OSGI框架的功能和设计思
  3. Jenkins安装与启动
  4. 机器学习入门系列(1)--机器学习概览
  5. java iterator_Java ArrayDeque iterator()方法与示例
  6. java 执行顺序混乱_java类执行顺序问题
  7. AI人工智能技术还原康乾盛世三代皇帝样貌,太帅了!
  8. openpyxl python 框线_Openpyxl对单元格应用边框
  9. 心电信号去噪python
  10. 基于Nginx日志的自动封异常ip和解封脚本
  11. IC REG BUCK ADJUSTABLE 3A 8SOIC
  12. 华三h3c系列交换机ACL实践
  13. 美团数据分析岗面试题+解题思路
  14. Tomcat架构详解
  15. Java实现aes加解密
  16. 位图与普通图片的区别
  17. 【机器学习】有监督、无监督、自监督、半监督、弱监督的区别
  18. 思博伦PosApp(Positioning Application)使用方法——如何设置动态载具
  19. Python:利用Pillow库创建字符画
  20. 币圈一级市场丨coinlist上新系列——TRIBL

热门文章

  1. Python3调用阿里OCR
  2. 德芙网络营销策略ppt_德芙--网络营销推广策略(ppt 37页)
  3. Linux使用笔记:Oracle数据库安装配置(命令行安装)
  4. dayjs怎么处理UTC时间格式
  5. python处在哪个阶段_如何在学Python的过程中更好地成长技术
  6. CLRS 5.3随机算法
  7. 精密空调故障有哪些?精密空调常见故障维修
  8. Visual Studio 2022 vcvarsXXX.bat文件所在的目录
  9. 我是如何防止老公变成渣男的
  10. 【幻灯片分享】iOS平台上开发音视频处理 | 盛大微酷 赵志猛 | iOS DevCamp