【问题标题】:How do I convert if then else to an expression using ternary operators [closed]如何使用三元运算符将 if then else 转换为表达式 [关闭]
【发布时间】:2019-05-21 11:12:08
【问题描述】:

我希望使用三元运算符而不是 ifelseelse if 语句来定义以下函数。

#include <iostream> //Conditional Ternary Operator (if ? :else )
using namespace std;
int greatest(int a,int b,int c)
{
   // what I tried
  (a>b && a>c) ?return (a); :(b>a && b>c) ?return (b); :return(c);

  // what I want
  /* if(a>b && a>c)
  return(a);
  else if (b>a && b>c)
    return (b);
  else
    return(c);
  */
}


int main()
{
 int a,b,c;
 cout<<"Enter a :";
 cin>>a;
 cout<<"Enter b :";
 cin>>b;
 cout<<"Enter c:";
 cin>>c;
 cout<<greatest(a,b,c)<<": Is Greater";
 return 0;
}

【问题讨论】:

  • return (a&gt;b &amp;&amp; a&gt;c) ? a : ((b&gt;a &amp;&amp; b&gt;c) ? b : c);
  • 为什么不return std::max(a, std::max(b, c));

标签: c++ function if-statement conditional


【解决方案1】:

首先,不要这样做:有选择的时候选择可读的形式。

也就是说,第三级旨在用作以表达式作为输入的语句的一部分。不要在里面写语句:

 return (a>b && a>c) ? a : ((b>a && b>c) ? b : c);

如您所见,开头没有;return。我还添加了圆括号,因为我不想考虑顺序。

【讨论】:

  • 你所有的括号都是多余的。
  • @John:技术上可能不需要它们,如果它们提高可读性,它们就会增加价值。
  • 完全正确,但添加括号并不总能提高可读性。如果不需要括号,那么它可以让你仔细考虑并开始怀疑表达式是否有比眼睛看到的更多内容。在不需要嵌套括号的地方使用嵌套括号时尤其如此。..
【解决方案2】:

我将扩展@JVApen 的答案,并建议您对如下所示的三元运算符使用缩进方案以提高可读性。

%expr%
   ? %result_true%
   : %result_false%

你的例子

return a>b && a>c
    ? a 
    : b>a && b>c
        ? b 
        : c;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-22
    • 1970-01-01
    • 2021-03-17
    • 2012-07-11
    • 2015-07-05
    • 1970-01-01
    • 2019-10-13
    • 2017-02-18
    相关资源
    最近更新 更多