2017-07-25 9 views
0

で複数の条件を使用して、私は疑問に思ってエラー。以下、このコードは実際には理にかなっているか、私が一望できていた場合、私はif文の全体の束を書いてから私を救うC++でのif文複合体を作成しようとしていますC++でのif文

"if input is x AND choice is y, OR if...." 

それがあれば、任意のに当たった場合は一行のコードが実行されるように、基本的に私は、「場合-および」複数のテスト条件だ:私は何を達成しようとしていることである

if(input==choice) { 
     cout << "Tie!" << endl; 
}else if(input=="rock" && choice=="scissors" 
    || input=="scissors" && choice=="paper" 
    || input="paper" && choice=="rock") { 
     cout << input " beats " << choice << ", you win!" << endl; 
}else if(input=="rock" && choice=="paper" 
    || input=="scissors" && choice=="rock" 
    || input=="paper" && choice=="scissors"){ 
     cout << choice << " beats " << input << ", you lose!" << endl; 
} 

- 条件。出力は "演算子|| '"エラーに "一致しません"というエラーをスローします。

+0

パフォーマンスが重要な場合、私は非常に多くの文字列の比較を避けようとしている以外は、あなたがやろうとしていることに本質的に間違っているものはありません。 – Bungles

+0

@Bungles私はちょうどコンピュータに対してシンプルなロックペーパーはさみゲームを作成しようとしています。私は効率的で流暢なコードを書くために努力していますので、私は何か新しいことを試しています。 –

+1

'input =" paper "' - > 'input ==" paper "'、タイプミスとして閉じると投票します。 – HolyBlackCat

答えて

4

あなたはinput="paper" && choice=="rock")のタイプミスを持っていますが、代わりにタイプミスを固定する私は、コードを修正するためにあなたをお勧めします。あなたがこの巨大な条件のブロックでタイプミスを犯したのも不思議ではありません。あなたは、多くの繰り返しと、出力との混合ロジックを持っています。あなたが含まれ、あなたが...コードに次のステップとして

#include <iostream> 
#include <string> 
#include <vector> 
#include <utility> 
#include <algorithm> 

bool win(const std::string& input, const std::string& choice) { 
    static const std::vector<std::pair<std::string, std::string>> wins = 
      { { "rock", "scissors" }, 
       { "scissors", "paper" }, 
       { "paper", "rock" } 
      }; 
    return std::find(wins.begin(), wins.end(), std::make_pair(input, choice)) 
     != wins.end(); 
} 

int main() { 
    std::string choice = "paper"; 
    std::string input = "scissors"; 
    if (win(choice, input)) { std::cout << "you win! \n"; } 
    else     { std::cout << "you lose! \n"; } 
} 

をいくつかを保存することができます上のいくつかの行を過ごす場合は、そのコメントで述べたように列挙型を使用することにより、例えば、文字列、すべてを排除する必要があります。

+0

ベクトルを作成するにはそれをオーバーエンジニアリングすることです。 (std :: array)を使用し、 'if(input ==" rock "){return choice ==" scissors "} else ifとして' win'を直接実装します。 'は、プログラマーとコンパイラーの両方にとって、ほぼ同じくらい短くてはるかに読みやすいでしょう。 –

+0

ありがとう、私はこのコードのすべての部分を理解しているとは思えませんし、なぜ機能するのですか? –

+0

@danielH imhoは 'std :: array'を使用していると、オーバーエンジニアリングされます。文字通り問題がないときに固定サイズを主張するのはなぜですか?あなたの2番目のポイントはおそらく味の問題です。とにかく私が示したコードは、OPの出発点としてだけ意味されていたし、元のものより読むのが簡単だということに同意してほしい。 – user463035818

関連する問題