正确的三元运算符格式

Proper Ternary Operator Format

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

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

我想要它做的是:

    // 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;

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

more efficient

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

smaller

一个不起眼的目标,但是 不是 如果 可读性 因为它而达不到要求(如果因为句法复杂性,则更是如此) ...缺少括号...最终结果是错误的)。

记住:代码是写给人类阅读的。

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

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"});

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

在整个表达式周围放置一些括号,否则您将最终打印布尔值:

int guess = 10;
    int randomNumber = 9;

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

// Output: 1

正确代码:

int guess = 10;
    int randomNumber = 9;

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

/*Output:
Whoops! Try again!
You guessed higher than the random number!*/