正确的三元运算符格式

Proper Ternary Operator Format

本文关键字:三元 运算符 格式      更新时间:2023-10-16

这就是我所拥有的。我不确定如何正确编写它。我试着在谷歌上搜索,但无济于事。请不要太畏缩:

cout << (guess > randomNumber) ? "nWhoops! Try again!n You guessed higher than the random number!nn"
        : (guess < randomNumber) ? "nWhoops! Try again!n You guessed lower than the random number!nn"
        : "";

我希望它做的是这样的:

    // Gives hint that inputted number is higher or lower
    // than inputted number
    if (guess > randomNumber)
        cout << "nWhoops! Try again!"
        << " You guessed higher than the random number!n"
        << endl;
    else if (guess < randomNumber)
        cout << "nWhoops! Try again!"
        << " You guessed lower than the random number!n"
        << endl;

任何帮助将不胜感激。我只是想学习如何编写更高效、更小的程序。将不胜感激任何反馈。

在整个表达式周围加上一些括号,否则你最终会打印布尔值:

int guess = 10;
    int randomNumber = 9;
    cout << (guess > randomNumber) ? "nWhoops! Try again!n You guessed higher than the random number!nn"
            : (guess < randomNumber) ? "nWhoops! Try again!n You guessed lower than the random number!nn"
            : "" ;
// Output: 1

正确的代码:

int guess = 10;
    int randomNumber = 9;
    cout << ( (guess > randomNumber) ? "nWhoops! Try again!n You guessed higher than the random number!nn"
            : (guess < randomNumber) ? "nWhoops! Try again!n You guessed lower than the random number!nn"
            : "" ); // Notice the brackets!
/*Output:
Whoops! Try again!
You guessed higher than the random number!*/

更高效

与您在那里所做的事情无关(如果"高效"是指更好的运行时特征)。

较小

一个卑微的目标,但如果可读性因此而不足,则不会(如果由于语法复杂性......缺少括号...最终结果是错误的)。

请记住:代码是为人类阅读而编写的。

您可能应该坚持您在问题中也展示ifelse方法。也就是说,恕我直言,一个"好"的方法(如果你真的需要对此进行抽象)是将其打包到某个函数中:

template<class T, class X, class Y, class Z>
void comp_if(T value, T reference, X less, Y equal, Z greater) {
  if (value < reference) less();
  else if (value > reference) greater();
  else equal();
}

像这样使用

// missing real macros a lot
comp_if(foo, bar,
  []() {cout << "less"; },
  []() {cout << "equal";},
  []() {cout << "greater"});

这是否真的有助于提高可读性是我留给读者的选择。