在输出流中使用`?:`

mah*_*ood 3 c++ cout conditional-statements

我想?:在运行流中集成运算符.这是代码

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

但输出是

a= 1a= 0a= 1a= 1a= 1a= 1a= 0a= 0a= 1a= 1
Run Code Online (Sandbox Code Playgroud)

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

Som*_*ude 6

这是因为输出操作<<具有更高的优先级比三元运算符?:.所以对于编译器它是一样的

(std::cout << "a= " << (a)) ? "true\n" : "false\n";
Run Code Online (Sandbox Code Playgroud)

您需要将括号显式放在正确的位置:

std::cout << "a= " << (a ? "true\n" : "false\n");
Run Code Online (Sandbox Code Playgroud)

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

std::cout << "a= " << std::boolalpha << a << '\n';
Run Code Online (Sandbox Code Playgroud)