2016-08-26 20 views
-4

(dev C++を使用しています)私はC++を初めて使ったので、基本的なテキストRPGゲームを作ることにしました。私は何度もプログラムをデバッグしましたが、それはまったく何も起こりません。私はプログラムをテストするたびに、私は旅行者を攻撃したいと言うことができる、それはTESTを印刷します(私は問題を解決することができるまで、私は一度そこに置いた)。 if(attack == "talk" || "Talk")をif(attack == "attack" || "Attack")で切り替えると、印刷した旅行者と話をしたいと思います。彼が武装していないことを見つける旅行者!すべての助けに感謝します。これは常にtrueように、第2の部分"Right"を評価してifステートメントの問題 - 比較演算子

あなたに ||演算子を使用している
#include <iostream> 
#include <string> 


using namespace std; 

int main() { 
    string dir, attack, trade; 
    string inventory[] = {"Food", "Sword", "Armor"}; 
    cout << "Do you go left, right or forward?" << endl; 
    cin >> dir; 
    if(dir=="left"||"Left") { 
     cout << "You decide to go left" << endl; 
     cout << "On the way you meet a traveller, do you attack or talk?" << endl; 
     cin >> attack; 
     if(attack=="talk"||"Talk") { 
      cout << "TEST" << endl; 
      } 
     else if(attack=="attack"||"Attack") { 
      cout << "You rush forward and murder the traveller to find he was un-armed!\a" << endl; 
      } 
     else { 
      cout << "test" << endl; 
      } 

    } 
    else if(dir=="Right"||"Right") { 
     cout << "You decide to go right" << endl; 
     } 
    else { 
     cout << "You decide to go forward" << endl; 
     } 
    system("PAUSE"); 
    return 0; 
} 
+0

'dir ==" left "|| dir ==" Left "'に変更します。それ以外の場合は常に「真」になります。 – songyuanyao

+0

インターネットで "C++ transform string"を検索します。比較する前に文字列をすべて大文字またはすべて小文字に変換する場合は、比較を1つのみ行う必要があります。 –

+0

ところで、 "正しい"方向のチェックにタイプミスがあります。両方の比較テキストは同じです。 –

答えて

3

は、例えば、if(dir=="Right"||"Right")

は、これは間違った使い方です。このルーチンにALLあなたの比較を変更します。

if(dir=="Right"|| dir=="Right")

はしかし、ここでは、両方のステートメントは、「右」以来、同じ「右」と同じです。あなたの論理をチェックしてください、dir == "Right" || dir == "right"を意味しましたか?ここで

は、私が言及した問題を修正した後、あなたのコードのクリーンコピーである:

int main() 
{ 
    string dir, attack, trade; 
    string inventory[] = { "Food", "Sword", "Armor" }; 

    cout << "Do you go left, right or forward?" << endl; 
    cin >> dir; 

    if (dir == "left" || dir == "Left") 
    { 
     cout << "You decide to go left" << endl; 
     cout << "On the way you meet a traveller, do you attack or talk?" << endl; 
     cin >> attack; 

     if (attack == "talk" || attack == "Talk") 
      cout << "TEST" << endl; 
     else if (attack == "attack" || attack == "Attack") 
        cout << "You rush forward and murder the traveller to find he was un-armed!\a" << endl; 
       else 
        cout << "test" << endl; 
    } 
    else if (dir == "Right" || dir == "right") 
       cout << "You decide to go right" << endl; 
      else 
       cout << "You decide to go forward" << endl; 

    system("PAUSE"); 
    return 0; 
} 
+0

'cin >> attack; if(attack == "talk" || "talk"){ cout << "TEST" << endl; } else if(attack == "attack" || "Attack"){ cout << "あなたは急いで急いで、彼が武装していないことを見つけるために殺害する! } else { cout << "test" << endl; } 'が主な問題ですが、助けてくれると思いますか? –

+0

@BramwellSimpson私はもう一度私の答えを読む必要があると思う。これは間違っています –

+1

OPは、テキストをすべて小文字またはすべての大文字に変換*することでこの問題を取り除くことができます(これは間違っています)比較。 –

1

songyuanyaoさん/ FirstStepの回答に加えて、ジャスト説明:

if(dir == "left" || "Left") 

に相当します
if((dir == "left") || ("Left")) 

これは再び

と同等です
if((dir == "left") || ("Left" != 0)) 

、文字列リテラル「左」が0に等しくないメモリ内のアドレスを持っている...

サイドノート:「左」はさえはstd ::し、このための文字列に変換されていません。