2016-08-26 3 views
-4

(Использование dev C++) Поскольку я довольно новичок в C++, я решил создать базовую игру для RPG. Я много раз отлаживал программу и ничего не выдумывал. Каждый раз, когда я тестирую программу, и, скажем, хочу атаковать путешественника, он печатает TEST (который я там поставил, пока не смогу исправить проблему). Если я переключу if (attack == "talk" || "Talk") с if (attack == "attack" || "Attack"), тогда я хочу поговорить с путешественником, которого он печатает: «Вы мчатесь вперед и убиваете путешественник, чтобы найти, что он не вооружен! " Вся помощь будет оценена.Вложенные проблемы с оператором - Оператор сравнения

#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++». Если перед сравнением вы преобразуете строку во все прописные буквы или все строчные буквы, вам нужно будет сделать только одно сравнение. –

+0

Кстати, у вас есть опечатка в вашем чеке для «правильного» направления; оба текста сравнения одинаковы. –

ответ

3

Вы используете || оператор, как, например, if(dir=="Right"||"Right")

Это неправильное использование, как это оценивает вторую часть "Right" в true всегда. Изменение ВСЕХ ваших сравнений с этой рутиной:

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 >> атака; if (attack == "talk" || "Talk") { cout << "TEST" << endl; } else if (attack == "attack" || "Attack") { cout << "Вы мчитесь вперед и убиваете путешественника, чтобы найти, что он не вооружен! \ A" << endl; } else { cout << "test" << endl; } '- главная проблема, вы считаете, что можете помочь? –

+0

@BramwellSimpson Я думаю, вам нужно снова прочитать мой ответ. Посмотрите на ваши инструкции 'if':' if (attack == "talk" || "Talk") '.. Это неверно –

+1

OP может удалить эту проблему, * преобразуя * текст во все строчные или все заглавные буквы перед тем, как сделать сравнение. –

1

Просто объяснение в дополнение к/ответ songyuanyao в FirstStep в:

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

эквивалентно

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

, который эквивалентен снова

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

И как строковый литерал «Left» имеет адрес в памяти неравный до 0 ...

Примечание стороны: «Left» даже не преобразуется в StD :: строка для этого.

Смежные вопросы