编辑了一个刽子手小游戏的c程序,但是好像运行有点问题,游戏没有办法胜利

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <assert.h>
#include <ctype.h>
#include <time.h>


int main() {

    char WORDS[10][20] = { "Apple","Banana","Cucumber","Dumpling","Eggplant","Fish","Garlic","Ham","Icecream","Jellies" };
    //这里运用到了二维数组的知识,对题库进行一个存储。

    int num;
    printf("Enter the number of words to guess (<=10):");
    scanf("%d", &num);
    int count[20];
    int i;

    srand(time(NULL));
    //srand函数是一个时间函数,这里相当于设置了一个随机时间的种子,目的是为了后面的随机选词,不会的话可以搜一下这个关键词

    for (i = 0; i < num; i++)
    {
        count[i] = strlen(WORDS[i]);
        printf("%s\n", WORDS[i]);
    }
    printf("\n");
    //这里的count计算了每个单词的长度,而这一块是把前面的二维数组题库输出作为题目提示。


    char again = 'y';
    //设置一个循环条件,可以让玩家不断的玩
    while (again == 'y') {

        int x = rand() % (num);
        int life = 5;
        char guess[20];

        printf("  +------------------+\n");
        printf("  |                  |\n");
        printf("  |                  |\n");
        for (i = 0; i < 10; i++)
        {
            printf("  |\n");
        }
        printf("================================\n");
        //画了一个绞刑架,个人感觉,简单的图形可以直接printf输出,for循环反而会使问题复杂化


        printf("Word:");

        char xiao[20];
        for (i = 0; i < count[x]; i++)
        {
            xiao[i] = '_';
        }


        for (i = 0; i < count[x]; i++)
        {
            printf(" %c", xiao[i]);
        }
        printf("\n\n");
        //根据单词长度画小杠杠


        while (life > 0)
        {
            printf("Guess (%d lives): ", life);
            scanf("%s", guess);
            printf("\n");

            if (strlen(guess) != 1)
                //当玩家已经猜出单词的时候
            {
                if (strlen(guess) == strlen(WORDS[x]))
                {
                    int judge = 0;
                    for (i = 0; i < count[x]; i++)
                    {
                        if (guess[i] != WORDS[x][i])
                        {
                            break;
                        }
                        judge++;
                    }
                    if (judge == count[x])
                    {
                        printf("Correct!\n");
                        printf("Do you want to play again (y/n)? ");
                        scanf(" %c", &again);
                        break;
                    }
                }
                printf("Word:");
                for (i = 0; i < count[x]; i++)
                {
                    printf(" %c", xiao[i]);
                }
                printf("\n\n");
                life--;
            }
            else
                //当玩家要一个一个猜的时候
            {

                printf("Word:");
                if (strstr(WORDS[x], guess) != NULL)
                    //strstr函数会判断,后的字符串有没有与,前的字符串相同的部分,如果没有就会返回null
                {
                    for (i = 0; i < count[x]; i++)
                    {
                        if (guess[0] == (char)WORDS[x][i])
                        {
                            xiao[i] = guess[0];
                        }
                    }
                    int correct = 0;
                    for (i = 0; i < count[x]; i++)
                    {
                        if (xiao[i] != '_')
                        {
                            correct++;
                            continue;
                        }
                        break;
                    }
                    for (i = 0; i < count[x]; i++)
                    {
                        printf(" %c", xiao[i]);
                    }
                    printf("\n\n");
                    if (correct == count[x]) {
                        printf("Correct!\n");
                        printf("Do you want to play again? ");
                        scanf("%c", &again);
                        break;
                    }
                }
                else
                {
                    for (i = 0; i < count[x]; i++)
                    {
                        printf(" %c", xiao[i]);
                    }
                    printf("\n\n");
                }
                life--;

                //下面是一步一步的画小人
                if (life == 4)
                {
                    printf("  +------------------+\n");
                    printf("  |                  |\n");
                    printf("  |                  |\n");
                    printf("  |                  O\n");
                    for (i = 0; i < 9; i++)
                    {
                        printf("  |\n");
                    }
                    printf("================================\n");
                }

                if (life == 3)
                {
                    printf("  +------------------+\n");
                    printf("  |                  |\n");
                    printf("  |                  |\n");
                    printf("  |                  O\n");
                    printf("  |                  |\n");
                    for (i = 0; i < 8; i++)
                    {
                        printf("  |\n");
                    }
                    printf("================================\n");
                }

                if (life == 2)
                {
                    printf("  +------------------+\n");
                    printf("  |                  |\n");
                    printf("  |                  |\n");
                    printf("  |                  O\n");
                    printf("  |                 /|\n");
                    for (i = 0; i < 8; i++)
                    {
                        printf("  |\n");
                    }
                    printf("================================\n");
                }

                if (life == 1)
                {
                    printf("  +------------------+\n");
                    printf("  |                  |\n");
                    printf("  |                  |\n");
                    printf("  |                  O\n");
                    printf("  |                 /|\\ \n");
                    for (i = 0; i < 8; i++)
                    {
                        printf("  |\n");
                    }
                    printf("================================\n");
                }
            }
        }
        if (life == 0) {
            printf("  +------------------+\n");
            printf("  |                  |\n");
            printf("  |                  |\n");
            printf("  |                  O\n");
            printf("  |                 /|\\ \n");
            printf("  |                 / \\ \n");
            for (i = 0; i < 7; i++)
            {
                printf("  |\n");
            }
            printf("================================\n");
        }
        printf("You have no more lives!\n");
        printf("Do you want to play again (y/n)? ");
        scanf(" %c", &again);

    }

    exit(1);
}


想知道 哪儿出问题
方法一、断点调试, linux gdb (编译时 -g 确保生成有调试信息)或者 windows vs
比如 gdb a.out
之后 先设断点位置 (比如90行 和 135行):
b 90
b 135
运行:
r
断点停下来后,可以用p 打印查看变量值
p life
n 是单步执行下一行, c是继续执行程序。

方法二、就是每处 分支 或者关键点 输出调试文字,把变量什么打印出来 看 是什么流向。

你的问题 估计就是 if else 括号范围有点问题, 自己从逻辑上分段,2种玩法分支各自放一起, 失败的操作都放一起, 打印的放一起。