сравнение строк, если операторы игнорируются

0

Я работаю над стратегической игрой, используемой в битве с звездными войнами 2. Это совершенно другая программа, поэтому вам не нужно ничего об этом знать, чтобы помочь мне. все, что вам нужно знать, - это то, как работает iostream, и строки сравниваются с операторами.

'#include "stdafx.h"
#include <iostream>
using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
    char Era[]="n";
    int eranumber=0;
    char* content [4] [28];
    char action[]="n";
    char whichplanet[]="n";
    char facilitytype[]="n";

//Jedi civil war
content [0] [0] ="Republic";
content [0] [1] ="Reavens Sith Empire";
content [0] [2] ="rectuitment center";
content [0] [3] ="rectuitment center";

content [0] [4] ="Alderaan";
content [0] [5] ="Bespin";
content [0] [6] ="Coruscant";
content [0] [7] ="Dagobah";
content [0] [8] ="Concord Dawn";
content [0] [9] ="Felucia";
content [0] [10] ="Geonosis";
content [0] [11] ="Harrun Kal";
content [0] [12] ="Hoth";
content [0] [13] ="Tatooine";
content [0] [14] ="Kamino";
content [0] [15] ="Kashyyyk";
content [0] [16] ="Methalyn";
content [0] [17] ="Mustafar";
content [0] [18] ="Mygeeto";
content [0] [19] ="Naboo";
content [0] [20] ="Ord Ilbanna";
content [0] [21] ="Polis Massa";
content [0] [22] ="Rattatak";
content [0] [23] ="Raxus Prime";
content [0] [24] ="Rhen Var";
content [0] [25] ="Utapau";
content [0] [26] ="Yavin";
// Great galactic war
content [1] [0] ="Republic";
content [1] [1] ="Sith empire";
content [1] [2] ="rectuitment center";
content [1] [3] ="rectuitment center";

content [1] [0] ="Coruscant";
content [1] [1] ="Dagobah";
content [1] [2] ="Alderaan";
content [1] [3] ="Felucia";
content [1] [4] ="Tatooine";
content [1] [5] ="Kamino";
content [1] [6] ="Kashyyyk";
content [1] [7] ="Mustafar";
content [1] [8] ="Mygeeto";
content [1] [9] ="Naboo";
content [1] [10] ="Polis Massa";
content [1] [11] ="Utapau";
//clone wars
content [2] [0] ="Republic";
content [2] [1] ="Sepratists";
content [2] [2] ="Cloning Facility";
content [2] [3] ="Driod Factory";

content [2] [4] ="Alderaan";
content [2] [5] ="Bespin";
content [2] [6] ="Coruscant";
content [2] [7] ="Dagobah";
content [2] [8] ="Felucia";
content [2] [9] ="Geonosis";
content [2] [10] ="Harrun Kal";
content [2] [11] ="Hoth";
content [2] [12] ="Tatooine";
content [2] [13] ="Kamino";
content [2] [14] ="Kashyyyk";
content [2] [15] ="Methalyn";
content [2] [16] ="Mustafar";
content [2] [17] ="Mygeeto";
content [2] [18] ="Naboo";
content [2] [19] ="Ord Ilbanna";
content [2] [20] ="Polis Massa";
content [2] [21] ="Rattatak";
content [2] [22] ="Raxus Prime";
content [2] [23] ="Rhen Var";
content [2] [24] ="Utapau";
content [2] [25] ="Yavin";
//Galactic civil war
content [3] [0] ="Rebel Alliance";
content [3] [1] ="Galactic Empire";
content [3] [2] ="rectuitment center";
content [3] [3] ="rectuitment center";

content [3] [4] ="Alderaan";
content [3] [5] ="Bespin";
content [3] [6] ="Coruscant";
content [3] [7] ="Dagobah";
content [3] [8] ="Concord Dawn";
content [3] [9] ="Felucia";
content [3] [10] ="Geonosis";
content [3] [11] ="Harrun Kal";
content [3] [12] ="Hoth";
content [3] [13] ="Tatooine";
content [3] [14] ="Kamino";
content [3] [15] ="Kashyyyk";
content [3] [16] ="Methalyn";
content [3] [17] ="Mustafar";
content [3] [18] ="Mygeeto";
content [3] [19] ="Naboo";
content [3] [20] ="Ord Ilbanna";
content [3] [21] ="Polis Massa";
content [3] [22] ="Rattatak";
content [3] [23] ="Raxus Prime";
content [3] [24] ="Rhen Var";
content [3] [25] ="Utapau";
content [3] [26] ="Yavin";
content [3] [27] ="Endor";

    cout <<"Select era (1.kotor,2.swotor,3.cw,4.gcw):";
    cin >> Era;
    if (strcmp(Era,"kotor"))
    {
        eranumber=0;
    }

    if (strcmp(Era, "swotor"))
    {
        eranumber=1;
    }

    if (strcmp(Era,"cw"))
    {
        eranumber=2;
    }

    if (strcmp(Era, "gcw"))
    {
        eranumber=3;
    }

    cout <<content [eranumber] [0]<< ", choose an action (1.Create facility, 2.Attack, 3.Create fleet)";
    cin >> action;
    if (strcmp(action,"create facility"))
    {
    cout<< "What type of facility(1.Mining site,2.)";
    cin >> facilitytype;
    if (strcmp(facilitytype,"miningsite"))
    {

    }
    }
    if (strcmp(action,"attack"))
    {
    cout <<"1."<<content [eranumber] [4]<<endl;
    cout <<"2."<<content [eranumber] [5]<<endl;
    cout <<"3."<<content [eranumber] [6]<<endl;
    cout <<"4."<<content [eranumber] [7]<<endl;
    cout <<"5."<<content [eranumber] [8]<<endl;
    cout <<"6."<<content [eranumber] [9]<<endl;
    cout <<"7."<<content [eranumber] [10]<<endl;
    cout <<"8."<<content [eranumber] [11]<<endl;
    cout <<"9."<<content [eranumber] [12]<<endl;
    cout <<"10."<<content [eranumber] [13]<<endl;
    cout <<"11."<<content [eranumber] [14]<<endl;
    cout <<"12."<<content [eranumber] [15]<<endl;
    cout <<"13."<<content [eranumber] [16]<<endl;
    cout <<"14."<<content [eranumber] [17]<<endl;
    cout <<"15."<<content [eranumber] [18]<<endl;
    cout <<"16."<<content [eranumber] [19]<<endl;
    cout <<"17."<<content [eranumber] [20]<<endl;
    cout <<"18."<<content [eranumber] [21]<<endl;
    cout <<"19."<<content [eranumber] [22]<<endl;
    cout <<"20."<<content [eranumber] [23]<<endl;
    cout <<"21."<<content [eranumber] [24]<<endl;
    cout <<"22."<<content [eranumber] [25]<<endl;
    cout <<"23."<<content [eranumber] [26]<<endl;
    cout <<"24."<<content [eranumber] [27]<<endl;

    cout<< "Select a planet to attack:";
    cin >> whichplanet;
    }
    return 0;
}'
  • 0
    просто гугл iostream и strcmp ;)
  • 2
    Заявления strcmp не игнорируются. Они работают так же, как вы запрограммировали их на работу. Вы игнорируете, как работает strcmp (;)). Проверьте man strcmp и посмотрите, что означают возвращаемые значения.
Показать ещё 4 комментария
Теги:
string
if-statement
console
iostream

1 ответ

0

strcmp возвращает тип типа int не тип boolean.

Поэтому strcmp возвращает 0, если обе strings одинаковы, в противном случае он возвращает число +ve или -ve зависимости от разницы между двумя strings.

Поэтому вам нужно написать:

if (strcmp(Era,"kotor")==0)
{
    eranumber=0;
}

if (strcmp(Era, "swotor")==0)
{
    eranumber=1;
}

if (strcmp(Era,"cw")==0)
{
    eranumber=2;
}

if (strcmp(Era, "gcw")==0)
{
    eranumber=3;
}

Также помните, что strcmp чувствителен к регистру (т.е. "A" не соответствует "a" в соответствии с этим). Если вы хотите проигнорировать случай, используйте вместо этого strcmpi.

ПРИМЕЧАНИЕ. Еще strcmp вещь: strcmp и strcmpi определены в <string.h>

  • 0
    iostream.h не был действителен долгое время.
  • 0
    Прошу прощения, если я ошибаюсь. На самом деле я привык к Turbo C ++, где мы использовали «iostream.h», когда я изучал это в школе. Многое могло измениться с тех пор. Хорошо, тогда я удалю первую строку.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню