C ++打印布尔值,显示什么? [关闭]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C ++打印布尔值,显示什么? [关闭]相关的知识,希望对你有一定的参考价值。
我将bool
打印到输出流,如下所示:
#include <iostream>
int main()
{
std::cout << false << std::endl;
}
标准是否要求流上的特定结果(例如0
为false
)?
标准流有一个boolalpha
标志,用于确定显示的内容 - 当它为假时,它们将显示为0
和1
。如果这是真的,他们将显示为false
和true
。
还有一个std::boolalpha
操纵器来设置标志,所以这个:
#include <iostream>
#include <iomanip>
int main() {
std::cout<<false<<"
";
std::cout << std::boolalpha;
std::cout<<false<<"
";
return 0;
}
...产生如下输出:
0
false
为了它的价值,当boolalpha
设置为true时产生的实际单词是本地化的 - 也就是说,<locale>
有一个处理数字转换的num_put
类别,所以如果你使用正确的语言环境灌输流,它可以/将打印出true
和false
因为他们在该地区代表。例如,
#include <iostream>
#include <iomanip>
#include <locale>
int main() {
std::cout.imbue(std::locale("fr"));
std::cout << false << "
";
std::cout << std::boolalpha;
std::cout << false << "
";
return 0;
}
...至少在理论上(假设您的编译器/标准库接受“fr”作为“法语”的标识符)它可能会打印出faux
而不是false
。但是,我应该补充一点,对此的真正支持充其量是不均衡的 - 即使是Dinkumware / Microsoft库(在这方面通常相当不错)也会为我检查的每种语言打印false
。
使用的名称虽然在numpunct
方面定义,所以如果你真的希望它们能够正确打印出特定的语言,你可以创建一个numpunct
方面来做到这一点。例如,(我相信)法语至少相当准确的一个看起来像这样:
#include <array>
#include <string>
#include <locale>
#include <ios>
#include <iostream>
class my_fr : public std::numpunct< char > {
protected:
char do_decimal_point() const { return ','; }
char do_thousands_sep() const { return '.'; }
std::string do_grouping() const { return "3"; }
std::string do_truename() const { return "vrai"; }
std::string do_falsename() const { return "faux"; }
};
int main() {
std::cout.imbue(std::locale(std::locale(), new my_fr));
std::cout << false << "
";
std::cout << std::boolalpha;
std::cout << false << "
";
return 0;
}
结果是(正如你可能预期的那样):
0
faux
0将被打印。
与在C ++中一样,true表示1,false表示0。
如果你想打印false而不是0,那么你必须为str流设置boolalpha格式标志。
当设置boolalpha格式标志时,bool值通过其文本表示插入/提取:true或false,而不是整数值。
#include <iostream>
int main()
{
std::cout << std::boolalpha << false << std::endl;
}
输出:
false
以上是关于C ++打印布尔值,显示什么? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章