了解c++中的cout格式化

问题描述 投票:0回答:3

我用c++写东西已经有一段时间了。当我在做一个项目的时候,我遇到了一个可能对我有帮助的解决方案,但我不明白它是如何工作的。也许有人能帮我搞清楚到底是怎么回事。

for (int i = 1; i < length_of_board - 1; i++) {
  cout << i;
  for (int j = 1; j < length_of_board - 1; j++) {
    cout << (((i > 9) && (j < 2)) ? " " : "  ")
         << ((boardArray[i][j] == '8') ? '.' : boardArray[i][j]);
  }

  cout << endl;
}

我想知道那个cout是做什么的,我可以用两个if语句代替它吗?

c++ output cout
3个回答
3
投票

三元运算符的工作原理是

query ? if_true : if_false;

在你的情况下,这个表达式的展开方式是

if((i>9)&&(j<2)) cout<<" "; else cout<<"  ";
if(boardArray[i][j]=='8') cout<<'.'; else cout<<boardArray[i][j];

或者为了方便阅读。

if((i>9)&&(j<2))
{
    cout<<" ";
}
else
{
    cout<<"  ";
}
if(boardArray[i][j]=='8')
{
    cout<<'.';
}
else
{
    cout<<boardArray[i][j];
}

0
投票

也许当你拆开包装时,会更清楚一些。

cout<<(((i>9)&&(j<2))?" ":"  ")<<((boardArray[i][j]=='8')?'.':boardArray[i][j]);

它将变成这样。

if(i > 9 && j < 2) {
    std::cout << " "; // One space
}
else {
    std::cout << "  "; // Two spaces
}

if(boardArray[i][j] == '8') {
    std::cout << '.';
}
else {
    std::cout << boardArray[i][j];
}

第一部分(用一个或两个空格填充字符串)可以替换为: std::setw().

第二部分是简单地打印一个 . 每当 8 应打印。

具体原因不清楚。


0
投票

A ternary 操作员可以随时用 if-else 的说法。虽然反过来说通常不是真的。

三元操作符的工作方式是,表达式前的 ? 被评估,如果是 true 语气 之前: 被评估,否则,表达式 之后: 被评估。

在您的例子中,使用 if-else 会是这样的。

if ((i>9)&&(j<2))
  cout << " ";
else 
  cout << "  ";

if (boardArray[i][j]=='8')
  cout << ".";
else
  cout << boardArray[i][j];

这些都是等价的,你选择哪个取决于你觉得哪个更易读。

© www.soinside.com 2019 - 2024. All rights reserved.