2013-11-17 2 views
0

Я пытаюсь создать основную текстовую игру в C. Я пытаюсь сравнить строку набора с пользовательским вводом, но я терпеть неудачу на нем. Я довольно новичок в C (я работал с javascript, php и C++ в прошлом). Я уверен, что я делаю неправильно, либо вслепую просто, либо что-то, что я неправильно понял при чтении документации.Сравнение строк с C

#include <stdio.h> 
#include <string.h> 
#include <stdbool.h> 

int main(void) { 
/* Game variables */ 
bool game_over = false, 
    is_mage = false, 
    is_warrior = false; 
unsigned int sword_damage = 15, 
    magic_damage = 10, 
    magika = 20, 
    strength = 20, 
    health = 100, 
    gold = 20; 
char name [20], 
    type [7], 
    dest_1 [7], 
    dest_2 [7], 
    mage [4], 
    warrior[7]; 

/* Make string variables */ 
memset(dest_1, '\0', sizeof(dest_1)); 
memset(dest_2, '\0', sizeof(dest_2)); 
strcpy(mage, "mage"); 
strcpy(dest_1, mage); 
strcpy(warrior, "warrior"); 
strcpy(dest_2, warrior); 

/* Print introduction and set up player */ 
printf("\t\t\t\tAngrokk\n\t\tCopyright: Benjamin Williams 2013\n\n"); 
printf("Character name: "); 
scanf("%s",name); 
printf("\nCharacter type (mage/warrior): "); 
scanf("%s",type); 
if (strcmp(type, dest_1) == 0) { 
    is_mage = true; 
} else if (strcmp(type, dest_2) == 0) { 
    is_warrior = true; 
} else { 
    printf("No type available, game shutting down."); 
    return 0; 
} 

/* Main game loop */ 
while (!game_over) { 

    /* Detect if the character is dead or not */ 
    if (health < 0) { 
     game_over = true; 
    } 
} 
printf("Game over"); 
return 0; 
} 
+0

'в то время как (! Game_over)' пожалуйста. – nhgrif

+1

Будьте осторожны с длиной строки, всегда должны содержать пробел для символа '\ 0'. например, ваш маг только [4] долго .. – amdixon

+1

Сколько персонажей требуется для хранения «воина». Подсказка: это * больше * чем 7. Из того, что я вижу, все они должны быть 'const char varname [] =" string value ";' anyway, и вы можете затем выбросить 'strcpy()' s. – WhozCraig

ответ

0

Я провел его через отладчик, и ваши сравнения строк отлично работают.

Чтобы определить строку, которую вы можете сделать следующее (помните строки это просто указатель на первый символ):

символ * воин = «воин»;

char * mage = "mage";

Тогда ...

`если (зЬгстр (маг, тип) == 0) {

// делать то, что вам нужно сделать

}

еще если (зЬгстр (воин, тип) == 0) {

// делать то, что вам нужно сделать

} `

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