我用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语句代替它吗?
三元运算符的工作原理是
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];
}
也许当你拆开包装时,会更清楚一些。
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
应打印。
具体原因不清楚。
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];
这些都是等价的,你选择哪个取决于你觉得哪个更易读。