在输出流中使用`?:`

时间:2013-09-02 07:44:07

标签: c++ conditional-statements cout

我想在输出流中集成?:运算符。这是代码

bool a;
for (int i = 0; i < 10; i++ ) {
  a = rand() % 2;
  std::cout << "a= " << (a) ? "true\n" : "false\n";
}

但输出是

a= 1a= 0a= 1a= 1a= 1a= 1a= 0a= 0a= 1a= 1

问题是,没有新行字符串。我该怎么办?

2 个答案:

答案 0 :(得分:6)

这是因为输出运算符<<比三元运算符?:precedence。所以对于编译器来说它与

相同
(std::cout << "a= " << (a)) ? "true\n" : "false\n";

您需要明确地将括号放在正确的位置:

std::cout << "a= " << (a ? "true\n" : "false\n");

或者a已经是bool,您可以使用std::boolalpha直接打印它:

std::cout << "a= " << std::boolalpha << a << '\n';

答案 1 :(得分:0)

您需要使用一些括号来覆盖默认的优先规则:

std::cout << "a= " << ((a) ? "true\n" : "false\n");