【问题标题】:ternary conditional operator equivalent?三元条件运算符等效?
【发布时间】:2016-04-07 03:43:15
【问题描述】:

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

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

【问题讨论】:

    标签: c ternary-operator


    【解决方案1】:

    我认为这更清楚了。

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

    【讨论】:

      【解决方案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);
          }
      }
      

      当然,你可以做的还有很多,但这只是一个开始

      【讨论】:

      • 好的,这有点清楚了。但是我也可以使用 while 循环来编写它吗?而不是在我的一个程序中使用三元运算符 while 循环语句,我想以一种更易于阅读的方式实现它。
      • "我也可以使用 while 循环这样写吗?" - 我不明白这部分,但我想你想以更容易阅读的方式编写条件,对吗?您是否试图避免使用三元运算符?
      • 是的,对不起我的英语。是的,我正在尝试删除三元运算符的使用。
      • 我已经更新了答案,让我知道你的想法
      • 是的,这正是我想要的。我会测试一下然后回复你。谢谢朋友
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-22
      • 2013-04-26
      • 2013-06-06
      • 2016-04-28
      • 2023-04-11
      • 2015-05-20
      相关资源
      最近更新 更多