我试图了解while循环。我意识到三元运算符如何工作的基础知识,但只在if语句的loo中使用它们,而不是在while循环中使用它们。这段代码真的让我失望。如果没有缩短,那么这个陈述的等价是什么?
int runOnce=0;
while(runOnce=runOnce?((token=strtok(NULL," "))!=NULL):((token=strtok(strCopy," "))!=NULL)) {
....
答案 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);
}
}
当然,你可以做很多事情,但这只是一个开始