2016-03-06 20 views
6

これは私が持っているものです。私はそれを正しく書く方法が不明です。私は周りにグーグルをしようとしたが、役に立たなかった。あまりうんざりしないでください:任意の助けをいただければ幸いです適切な3進演算子フォーマット

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

:私はそれをやりたいと思ってる何

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" 
     : ""; 

はこれです。私は自分のプログラムをより効率的に、より小さく書く方法を学びたいと思っています。フィードバックをいただければ幸いです。 (「効率的」であなたがより良い実行時の特性を意味している場合)あなたがそこにやっていることに関連していない

+0

を1三項演算子を使用すると効率的である...使い方あなたが私に尋ねると、同時に2つは厄介です。 –

+0

コードはわかりました。あなたはそれをコンパイルしようとしましたか? –

+0

'if' /' else if'の代わりに入れ子の三項演算子を使用する理由はありますか?これらのネストされた三項演算子を解読する代わりに、あなたのプログラムが何をしているのかを調べる方がはるかに簡単です。 – ppsz

答えて

4

そうでなければ、ブール値を印刷して終了するつもりだ、式全体の周りにいくつかのブラケットを入れて:

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!*/ 
+1

ありがとうございました!それを稼働させていただきありがとうございます。 :) –

+0

@ red-oneそうであれば解決してください!ありがとう! –

1

より効率的な

。謙虚な目標ではなく、それのために及ば(とさえそれほどための構文の複雑さ、もし...行方不明括弧ないかの読みやす

小さいです...最終的な結果は間違っています)。

メモ:コードは人間が読むために作成されています。

質問にも表示されている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"}); 

のように使用:そうは言って、私見「良い」のアプローチは、(あなたが本当にこのオーバー抽象化する必要がある場合は)いくつかの機能にそれを詰めることであろう私が読者に残す選択肢です。

+0

申し訳ありませんが、C++でこれほど多くのことを学んだことはありません。私はまだ初心者です。しかし、私は可読性についてのあなたの点を理解しています。具体的には、凝縮したかったのです。しかし、私はあなたの助言を将来のプログラムで考慮に入れます。 :) –

+0

@RedOne問題ありません。私の答えで取られたアプローチは、もしあなたがそのようなコードをたくさん*持っていれば、本当に有益になるでしょう。常に可能な限りコードを読むようにしてください。すべてのことを念頭に置いておくほうが簡単になるので、エラーが発生する頻度は少なくなります。 (精神的な深さと精神的な幅を記録する) –

+0

@anonymous downvoters:あなたの投票の理由を説明してください。私のポストIMHOはかなり直接的な方法で質問に答える。私は小さな構文エラーを強調表示しなかったので、私の答えはそのような投票に値するとは思えません。 –

関連する問題