【问题标题】:Understanding cout formating in c++了解 C++ 中的 cout 格式
【发布时间】:2020-05-12 16:12:48
【问题描述】:

我已经用 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 语句替换它。

【问题讨论】:

  • 旁白:假设length_of_board小于100,第一个可以用cout &lt;&lt; left &lt;&lt; setw(3) &lt;&lt; i;代替cout &lt;&lt; i;

标签: c++ output cout


【解决方案1】:

三元运算符的工作原理类似于

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];
}

【讨论】:

    【解决方案2】:

    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];
    

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

    【讨论】:

      【解决方案3】:

      打开包装后可能会更清晰一些

      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 时打印.

      具体原因尚不清楚。

      【讨论】:

        猜你喜欢
        • 2013-06-27
        • 2020-02-25
        • 1970-01-01
        • 2017-01-05
        • 1970-01-01
        • 1970-01-01
        • 2020-02-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多