c真正的循环语句在hangman中成为现实

时间:2014-04-07 07:39:30

标签: c arrays loops while-loop

kk我修复了它,但仍然有一个声明我必须把我认为if (hit == length)然后在你赢得的while循环printf之外。但我的问题现在应该放在if (hit == length)

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

//function prototypes

void game(char [], char [], int);
int main()
{
    char word[20] = {'d', 'u','c','k'};
    char guessed[20] ={'*s', '*s','*s','*s' };
    int length = strlen(word);

    game(word,guessed, length);

    getch();
    return 0;   
} 
void game(char answer[], char guess[], int length)
{
    int life = 5;   
    int x = 0;
    int y = 0;
    char letter;

    while (x < length && life > 0){
      int hit = 0;
      printf("enter letter\n");
      scanf(" %c",&letter);   
      for (y = 0; y < length; ++y) {
          if (answer[y] == letter && guess[y] != letter) 
          {
              ++hit;
              guess[y] = letter;
          }
      }
      if (!hit) 
      {
          x += hit; 
          printf("try again\n");
          life = life - 1;
          printf("%d tries remaining \n", life); 
      }
      else {
          printf("keep going\n");
      }  
   } 
}

3 个答案:

答案 0 :(得分:0)

您的条件if (!hit)会检查hit是否为0。

但是,在过程开始时只将其初始化为0 - 而不是while(..)循环的每次迭代。
因此 - 一旦hit被设置为不为0(在某些迭代中),它将始终保持那种方式(而不是0)。

您应该在hit = 0;循环内设置while(可能在其开头)。

答案 1 :(得分:0)

你应该在你的while循环开始时将hit设置为0,这样它就会为for循环的每次迭代单独检查:P

答案 2 :(得分:0)

试试这个

char guessed[20] ={ '*', '*','*','*' };
....
if (!hit) {
    printf("try again\n");
    life = life - 1;
    printf("%d tries remaining \n", life); 
}
else {
    x = hit; 
    printf("keep going\n");
}