三元条件运算符等价?

时间:2016-04-07 03:43:15

标签: c ternary-operator

我试图了解while循环。我意识到三元运算符如何工作的基础知识,但只在if语句的loo中使用它们,而不是在while循环中使用它们。这段代码真的让我失望。如果没有缩短,那么这个陈述的等价是什么?

int runOnce=0;
while(runOnce=runOnce?((token=strtok(NULL," "))!=NULL):((token=strtok(strCopy," "))!=NULL)) {
    ....

2 个答案:

答案 0 :(得分:3)

我认为这有点清楚。

token = strtok (strCopy," ");
while (token!=NULL)
{
    /* do stuff */
    token = strtok (NULL," ");
}

答案 1 :(得分:2)

好的,让我们一个接一个地看一遍。如你所说,你知道三元运算符的基础知识,所以我会正确解决这个问题。代码在这里:

// notice here I did not include the the assignment(=) operation and the variable before it
runOnce?((token=strtok(NULL," "))!=NULL):((token=strtok(strCopy," "))!=NULL) 

基本上意味着

if(runOnce)
{
    return ((token=strtok(NULL," "))!=NULL);
}
else
{
    return ((token=strtok(strCopy," "))!=NULL);
}

这个返回值依次保存到同一个变量 runOnce

runOnce = // ternary condition mentioned above 

所以,最后如果变量 runOnce 为真,那么while循环的条件将为真

<强>更新 为了使代码更容易理解,你可以做这样的事情

int runOnce=0;
while(conditionForWhileLoop(runOnce)) 
{
    // ...
}

int conditionForWhileLoop(int runOnce)
{
    if(runOnce)
    {
        return ((token=strtok(NULL," "))!=NULL);
    }
    else
    {
        return ((token=strtok(strCopy," "))!=NULL);
    }
}

当然,你可以做很多事情,但这只是一个开始