为了好玩,我正在用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"));

09-09 21:07
查看更多