【问题标题】:Change from if else to ternary operator从 if else 更改为三元运算符
【发布时间】:2012-06-28 16:27:03
【问题描述】:

这是正常的代码:

       if(a==b)
            printf("equal");
        else if(a>b)
            printf("bigger");
        else
            printf("smaller");

我的老师想把 if/else 改成这个结构:

printf("%s",a>b?"bigger":"smaller")

当然,这只是一个简单的标准。而且我不知道如何将其应用于上述代码以替换 if/else。

【问题讨论】:

  • 我听过不同的名字,但“条件运算符”这个词似乎很合理:en.wikipedia.org/wiki/%3F:
  • 它被称为三元运算符en.wikipedia.org/wiki/%3F:(出于某种奇怪的原因,未考虑维基百科链接中的最后一个冒号)
  • -1 在 S.O. 中要求作业
  • 因为在 C 中,条件运算符是唯一的三元运算符。您通常不会说,“嗯,我应该如何称呼/ 运算符:我知道,我将其称为二元运算符”。你可以称之为师;-)
  • @DexterHuinda 这不是真正的作业;)如果我删除homework pharse,您将看不到它的样子。 ;)

标签: c if-statement


【解决方案1】:

使用嵌套条件运算符通常不是一个好主意,但可以这样做:

printf("%s", a==b ? "equal" : (a > b ? "bigger" : "smaller"));

【讨论】:

  • 没有。 @fvu 抱歉,这只是我老师的一个小问题,这只是知识。我真正的任务和家庭作业与此不同:)它很难,很长,不需要技巧来完成
  • @DexterHuinda SO 上的想法是你引导学生找到答案,给他一个答案,他可以粘贴到他的作业中,以避免学生愚蠢。 Cfr Mimisbrunnr 的回答。
  • 我并不是为他完成了他的全部作业。在老师告诉他重写他的部分(已经正确的)代码之后,看起来他自己完成了 99% 的工作并需要帮助。我不明白为什么提出这个问题或直接回答是个问题。
  • @hqt 我只是希望你不要把这变成一种习惯。学会为自己思考。因为这就是为什么把它作为家庭作业带回家的全部想法,让你自己弄清楚。
【解决方案2】:

你的老师告诉你使用三元运算符。

// Generally it looks like this 
( predicate ) ? If_True : If_False ;

运算符可以与它自身堆叠,(使用括号语句)以生成更复杂的逻辑。

( predicate_0 ) ? If_True : ( ( predicate_1 ) ? If_True : ... )) ;

虽然通常以这种方式堆叠三元运算符会使代码更难阅读。在大多数情况下,您最好使用if ... else

【讨论】:

  • 对于一个极客的方法,这被称为风格编码。
  • 我个人比较喜欢三元运算符,用的也不少。虽然我有很多人抱怨它太难阅读(当然这可能与它在 Perl 中的使用有更多关系)
【解决方案3】:
printf("%s", a == b? "equal" : (a > b? "bigger" : "smaller"));

【讨论】:

  • 是的.. 抱歉.. 当我开始输入时,列表中没有答案.....Mark Byers 打败了我 :)
【解决方案4】:

有些喜欢三元运算符,有些不喜欢。

您的老师很适合向您展示它,并让您应用它。像任何东西一样,它可能会被滥用。

但是,它有一个非常酷的用途,任何其他方式都无法做到(AFAIK)。考虑以下几点:

#define MAX(_a_, _b_) (((_a_) > (_b_)) ? (_a_) : (_b_))

注意你可以这样使用:

int x = MAX(5, 17);

我不知道有什么方法可以用 if...else 语句来做到这一点。 (你可以通过函数调用来做到这一点,但这不是重点。)

就个人而言,除了最简单的情况外,我在所有情况下都避免使用三元。

为了记录,C 中的 1 行代码的执行速度不一定比 4 行代码快。小心使用三进制,以便编写 1 行。

https://softwareengineering.stackexchange.com/questions/28314/is-the-ternary-operator-evil Ternary operator: bad or good practice?

【讨论】:

  • 是的,这是使if...else 块像在lisp 和其他类似语言中一样具有返回值的好方法。
猜你喜欢
  • 2020-02-14
  • 2010-12-12
  • 2021-01-03
  • 1970-01-01
  • 1970-01-01
  • 2021-02-22
  • 1970-01-01
  • 2018-02-22
  • 1970-01-01
相关资源
最近更新 更多