迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > C++ >

在 C++ 中打印布尔值

作者:迹忆客 最近更新:2024/01/02 浏览次数:

当我们尝试在 C++ 中打印布尔值时,它们会被 std::cout 打印为 01,但有时最好以 truefalse 的形式查看输出。本文介绍如何在 C++ 中以文本形式打印布尔值。


布尔值在 C++ 中为真/假

假设我们在调试时通读了一行又一行的代码和日志文件,现在在大量错误和数字中很容易错过 01。所以最好将布尔值打印为 true/false

我们将看到实现这一目标的三种不同方法。


通过在 C++ 中添加三元语句以打印布尔值来修改 printf()

最简单的方法是在 printf() 中稍作修改,可以打印 truefalse。使用 printf() 打印 bool 时,我们必须使用格式为 %d,因为 bool 值没有特定参数。

由于 bool 比 int 短,因此当在 printf() 语句中传递时,它被提升为 int。但这会打印普通的旧 01,因此我们通过添加三元 if-statement 并将格式说明符更改为%s 来进行修改,我们得到我们想要的 truefalse 输出。

示例代码:

#include <iostream>
using namespace std;

int main() {
  printf("boolean true: %d\n", true);
  printf("boolean false: %d\n", false);

  // modified printf()
  printf("boolean true: %s\n", true ? "true" : "false");
  printf("boolean false: %s\n", false ? "true" : "false");
}

输出:

boolean true: 1
boolean false: 0
boolean true: true
boolean false: false

这种方法的问题是,当源代码文件变得大而复杂时,它会妨碍可读性。


cout 中使用 std::boolalpha 在 C++ 中打印布尔值

std::boolalpha 可以在 <iomanip> 头文件中找到,它适用于输入和输出流函数。标准流有一个 boolalpha 标志,它决定了在屏幕上打印的内容。

如果它设置为 true,它会显示布尔值的文本形式,即 truefalse,但是当它设置为 false 时,我们得到的布尔输出仅为 01

例子:

#include <iostream>
using namespace std;

int main() {
  cout << "when boolalpha flag is off\n";
  cout << "true: " << true << endl;
  cout << "false: " << false << endl;

  cout << "when boolalpha flag is on\n";
  cout << boolalpha << "true: " << true << endl;
  cout << boolalpha << "false: " << false << endl;
  cout << noboolalpha;
}

输出:

when boolalpha flag is off
true: 1
false: 0
when boolalpha flag is on
true: true
false: false

std::boolalpha 是打印 truefalse 作为输出的最佳方法之一,但它有一些缺点。首先,我们应该在通过 std::noboolalpha 使用后关闭 boolalpha 标志。

另一个问题是,如果我们想用日语或其他语言编写代码,并且我们确实想要打印"hai"(日语中为真)或"nai"(日语中为假)而不是 truefalse,该怎么办? ,或者如果我们想将单词大写为 TrueFalse,我们不能单独使用 std::boolalpha 来做任何这些。


使用 std::numpunc 的自定义 Facet 在 C++ 中打印布尔值

如上一段所述,如果我们想要打印除 truefalse 或大写或本地化输出之外的内容怎么办。这可以使用 std::numpunct 的自定义 facet 来完成。

facet 是描述与特定文化方面相关的语言环境特征集的类。流输入和输出操作使用 std::numpunctstd::numgetstd::numput 来解析数字输入和格式化数字输出。

std::numpunctfacet 封装了数字标点首选项。我们可以通过覆盖 std::numpunct 中的函数 do_truename()do_falsename() 来指定我们想要在 std::boolalpha 标志处于活动状态时返回的字符串。

在此之后,使用 std::locale 对象以及使用 std::cout.imbue() 我们可以替换当前的语言环境。

示例代码:

#include <ios>
#include <iostream>
#include <locale>
using namespace std;

class japanese_bool : public std::numpunct<char> {
 protected:
  std::string do_truename() const override { return "Hai"; }
  std::string do_falsename() const override { return "NAI"; }
};

int main() {
  cout.imbue(std::locale(std::locale(), new japanese_bool));
  cout << std::boolalpha;
  cout << "Japanese true : " << true << "\n";
  cout << "Japanese false : " << false << "\n";
  cout << noboolalpha;
}

在上面的代码中,new 不是内存泄漏,japanese_bool 对象是隐式引用计数的,当 std::locale 引用超出范围时,它会自动销毁。

输出:

Japanese true : Hai
Japanese false : NAI

结论

这篇文章教给我们不同的方法来打印布尔输出为 truefalse。如果我们想要 truefalse 作为输出,前两种方法更可取,而当我们想要一些专门的输出而不仅仅是真或假时,第三种方法是首选。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

如何在 C++ 中实现毫秒级的睡眠

发布时间:2024/01/02 浏览次数:124 分类:C++

本文介绍了在 C++ 中使用不同方法暂停程序执行,实现睡眠的方法。本文介绍了在 C++ 中睡眠毫秒的方法。使用 std::this_thread::sleep_for 方法在 C++ 中睡眠

如何在 C++ 中将双精度数四舍五入到整数上

发布时间:2024/01/02 浏览次数:88 分类:C++

本文演示了如何在 C++ 中把双精度数四舍五入到整数中。本文将为大家讲解几种在 C++ 中如何将双精度数四舍五入为整数的方法。使用 round() 函数将双精度数四舍五入到整数

如何在 C++ 中以毫秒为单位获取时间

发布时间:2024/01/02 浏览次数:60 分类:C++

本文介绍了如何在 C++ 中获取以毫秒为单位的时间。本文将介绍多种 C++ 方法,介绍如何以毫秒为单位获取时间。

如何在 C++ 中把 Char 数组转换为 Int

发布时间:2024/01/02 浏览次数:90 分类:C++

本文演示了在 C++ 中把 char 数组转换为 int 类型的方法。本文将介绍将 char 数组转换为 int 类型的 C++ 方法。使用 std::strtol 函数将 char 数组转换为 int 类型

如何在 C++ 中将 ASCII 码转换为字符

发布时间:2024/01/02 浏览次数:183 分类:C++

本文介绍了在 C++ 中如何将 ASCII 值转换为 char 的方法。本文将演示关于如何在 C++ 中把 ASCII 值转换为字符的多种方法。在 C++ 中使用赋值运算符将 ASCII 值转换为字符

如何在 C++ 中把十进制转换为二进制

发布时间:2024/01/02 浏览次数:71 分类:C++

本文介绍如何在 C++ 中把十进制数转换成二进制数。本文将介绍几种在 C++ 中如何将十进制数转换为二进制表示的方法。在 C++ 中使用自定义定义的函数将十进制数转换为二进制数

如何在 C++ 中把枚举型转换为字符串

发布时间:2024/01/02 浏览次数:138 分类:C++

本文演示了如何在 C++ 中把枚举转换为字符串。本文将解释几种在 C++ 中把枚举类型转换为 string 变量的方法。使用 const char*数组将枚举类型转换为字符串

在 C++ 创建一个字典

发布时间:2024/01/02 浏览次数:191 分类:C++

本文介绍了如何在 C++ 中创建一个字典。使用初始化列表构造函数在 C++ 中创建字典 在 C++ 标准容器库中,有一个名为 std::map 的字典,它实现了具有唯一键的排序键值对。

如何在 C++ 中将文本追加到文件

发布时间:2024/01/02 浏览次数:95 分类:C++

本文介绍了如何用 C++ 将文本追加到文件中的方法。使用 std::ofstream 和 open() 方法将文本追加到文件中

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便