【问题标题】:Ternary operator usage issue三元运算符使用问题
【发布时间】:2014-12-01 07:47:34
【问题描述】:

我之前使用过三元运算符来处理if-else 之类的条件,但这里有所不同,即不检查? 之前的条件。

  printf( "%d\n",10?0?5:11:12 );

已编辑: 那么,编译器将如何评估11,因为我在第一个? 之前没有看到任何条件。

【问题讨论】:

  • 你现在的三元运算符的语法? (condition)?TRUE:FALSE
  • @Rizier123 C 中的条件可以是整数值。所以它在语法上是正确的。
  • 为什么要投反对票?这里只允许学者。不就是一个学习平台吗???
  • 可能是因为你的问题不清楚。例如,有两个?。不清楚你在问什么,或者为什么你会期待 11 点以外的任何东西。
  • 要求两个(?)不是我的选择

标签: c ternary-operator


【解决方案1】:

表达式10 ? 0 ? 5 : 11 : 12 被这样解析:10 ? (0 ? 5 : 11) : 12。所以这意味着在第一个测试中,由于 10 为真,它将评估 0 ? 5 : 11,它评估为 11,因为 0 为假。

【讨论】:

    【解决方案2】:

    这样就解决了

    printf("%d\n",10?0?5:11:12);
    

    10?(0?5:11):12

    首先解决0?5:11,因为 0 表示 false,所以它会返回 11

    现在条件将类似于10?11:12

    由于10 是非零条件,所以它会返回11

    【讨论】:

      【解决方案3】:

      printf( "%d\n",10?0?5:11:12 ); 的语法是 (condition)?TRUE:FALSE

      两个三元运算符。为了更好的可读性和理解性,让我们这样说

      (10 ? (0 ? 5 : 11) : 12)
      

      所以,内部条件 (0 ? 5 : 11) 检查 0TRUE 还是 FALSE。这是一个FALSE 值,[是的,零被认为是FALSE,非零值被认为是TRUE,两者都是条件检查的完全有效的sysntax]。所以,它的计算结果为11

      现在,对于外部条件,代码显示(10 ? 11 : 12)。按照类似的逻辑,10TRUE,它返回 11。传递给printf()。这就是你获得输出的方式。

      【讨论】:

        【解决方案4】:

        您的表达式被解析为10?(0?5:11):12,内部条件表达式(0?5:11) 被常量折叠为11,然后整个表达式被常量折叠为11(因为10 为真,因为非零)。

        请注意,条件(例如?: ternary conditional expression 的第一个测试操作数)可以是任何标量、非void 表达式。特别是11 是一个有效条件。

        【讨论】:

          【解决方案5】:

          发生的事情有点伪代码:

          (但在三元运算符中,首先内部三元条件得到“计算”)

          if (10) {  //true
              if(0) {  //false
                  print 5
              } else {
                  print 11  //Output 11
              }
          
          } else {
              print 12
          }
          

          或者作为三元运算符,但更易读:

          (10 ? (0 ? 5 : 11) : 12)
          

          【讨论】:

          • 不,三元条件运算符用于表达式,而不是语句!
          • @BasileStarynkevitch 我的示例应该以伪代码显示代码行
          猜你喜欢
          • 2011-10-24
          • 1970-01-01
          • 2016-08-09
          • 2015-05-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多