For循环中的三元运算符导致无限迭代

Mr.*_*Nex 4 c for-loop ternary-operator infinite-loop operator-precedence

我正在研究一个函数来转置一个NxN存储在floats 数组中的矩阵.我的第一个实现似乎导致函数无限循环,我似乎无法弄清楚为什么.这是原始代码:

for(int i = 0; i < numRows % 2 == 0 ? numRows / 2 : numRows / 2 + 1; i++)
{
    for(int j = i + 1; j < numColumns; j++)
    {
        //Swap [i,j]th element with [j,i]th element
    }
}
Run Code Online (Sandbox Code Playgroud)

但是函数永远不会返回.在我的逻辑中没有看到错误我改写了表达式,现在有了以下工作代码:

int middleRow =  numRows % 2 == 0 ? numRows / 2 : numRows / 2 + 1;
for(int i = 0; i < middleRow; i++)
{
    for(int j = i + 1; j < numColumns; j++)
    {
        //Swap [i,j]th element with [j,i]th element
    }
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮助解释为什么第一个版本不起作用,但看似相同的第二个版本呢?

Sou*_*osh 10

根据运算符优先级表,<具有更高的优先级?:.您需要()明确使用以强制执行所需的优先级.

更改

for(int i = 0; i < numRows % 2 == 0 ? numRows / 2 : numRows / 2 + 1; i++)
Run Code Online (Sandbox Code Playgroud)

for(int i = 0; i < ( numRows % 2 == 0 ? numRows / 2 : numRows / 2 + 1) ; i++)
Run Code Online (Sandbox Code Playgroud)

注意:请使用第二种方法.在可读性,维护和理解方面要好得多.

  • 谢谢,我必须研究我的运算符优先级.这不是第一次让我遇到麻烦.将在10分钟内接受这个答案. (2认同)