为了好玩,我正在用C编写一个小的文字冒险游戏,我遇到了一个小问题。
char cobra_weapon[5];
int cobra_sword_bonus = 3;
int cobra_mace_bonus = -2;
int cobra_attack_score;
int cobra_main_hand;
int cobra_off_hand = shield;
do {
fgets(cobra_weapon, 5, stdin);
if (strcmp(cobra_weapon,"sword") == 0)
cobra_main_hand = sword + cobra_sword_bonus;
else if (strcmp(cobra_weapon,"mace") == 0)
cobra_main_hand = mace + cobra_mace_bonus;
else
printf ("You entered %s. Please enter either sword or mace.\n", cobra_weapon);
} while (strcmp(cobra_weapon,"sword") != 0 || strcmp(cobra_weapon,"mace") != 0);
我遇到的问题是当我输入正确的字符串时strcmp没有捕捉到条件。即使我键入剑或权杖,它仍然继续循环。我相信这将是一个简单的事情,我没有看到,但任何帮助将不胜感激。
最佳答案
首先,要考虑以下几点:
char cobra_weapon[5];
内存不足,无法存储“剑\0”。更改为:
char cobra_weapon[6];
…或者更好的是,将其改为更大的维度:
char cobra_Weapon[63+1];
然后,还要更改:
fgets(cobra_weapon, 5, stdin);
致:
fgets(cobra_weapon, sizeof(cobra_weapon), stdin);
最后,请记住fgets()喜欢将'\n'字符附加到输入字符串。因此,删除换行符很重要。也许这样更好:
do {
char *cp;
while(NULL == fgets(cobra_weapon, sizeof(cobra_weapon), stdin))
/* LOOP */ ;
cp=strchr(cobra_weapon, '\n');
if(cp)
*cp='\0';
...
只要有一把剑,或者-一个权杖,就要保持循环:
while (strcmp(cobra_weapon,"sword") != 0 || strcmp(cobra_weapon,"mace") != 0);
或:
while(strcmp(cobra_weapon,"sword") || strcmp(cobra_weapon,"mace"));
只要没有剑和权杖就继续循环:
while(strcmp(cobra_weapon,"sword") && strcmp(cobra_weapon,"mace"));
只要有一把剑和一个狼牙棒,就要保持循环:
while(0 == strcmp(cobra_weapon,"sword") && 0 == strcmp(cobra_weapon,"mace"));
只要有剑或权杖,就要继续循环:
while(0 == strcmp(cobra_weapon,"sword") || 0 == strcmp(cobra_weapon,"mace"));