Как исправить ошибки логики в моей игре «Угадай фильм» как C-программа - PullRequest
0 голосов
/ 07 октября 2019

Я написал Угадай фильм игру на языке программирования Си. Моя логика кажется правильной, но всякий раз, когда я запускаю программу, она не работает должным образом.

Вот мой код

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int ran = 1;
    int l, j = 0, i = 0, total = 0, d = 0;
    char b;
    char a[20];
    char s[1000];
    int z;
    FILE *my;

    printf("Enter your name:\n ");
    scanf("%s", s);

    ran = rand() % 6;
    if (ran == 1)
    {
        my = fopen("my1.txt", "r");
    }
    else if (ran == 2)
    {
        my = fopen("my.txt", "r");
    }
    else if (ran == 3)
    {
        my = fopen("my2.txt", "r");
    }
    else if (ran == 4)
    {
        my = fopen("my3.txt", "r");
    }
    else if (ran == 5)
    {
        my = fopen("my4.txt", "r");
    }

    for (d = 0; d < 20; d++)
        fscanf(my, "%c", &a[d]);

    fclose(my);

    printf("GUESS THE MOVIE GAME\n");

    for (j = 0; j < 7; j++)
    {
        if (a[j] == 'm')
        {
            printf("M ");
        }
        else
        {
            printf("_ ");
        }
    }

    printf("\n");
    printf("Let's begin the game\n");
    for (i = 0; i < 7;)
    {             
        if (a[i] != 'm')
        {
            printf("enter character number %d\n",i+1);
            scanf("%c", &b);
            if (b == a[i])
            {
                printf("its a right guess\n");
                total = total + 4;
                i++;
            }
            else if (b != a[i])
            {
                printf("Wrong choice\n");
                if (total == 1 || total == 0)
                {
                    total=0;
                }
                else
                {
                    total = total - 2;
                }
            }
        }
    }
    printf("You have guessd the movie\n");
    printf("The movie name is: ");
    for (i = 0; i < 7; i++)
    {
        printf("%c",a[i]);
    }
    printf("Your score is %d\n",total);
}

Это вывод программы, который я получаю каждый разЯ запускаю приведенный выше код:

Введите ваше имя:
Радж
Угадай игру в кино
_ _ _ _ M _ _
Давайте начнем игру
Введите номер символа 1
Неправильный выбор
Введите номер символа 1
I
Неправильный выбор
Введите номер символа 1
Неправильный выбор
Введите номер символа 1

1 Ответ

0 голосов
/ 08 октября 2019

Помимо недостатков, отмеченных в комментариях, есть одна серьезная логическая ошибка:

    for (i = 0; i < 7;)
    {             
        if (a[i] != 'm')
        {
            …
        }
    }

Если цикл встречает m, он повторяется бесконечно. Исключите if (a[i] != 'm') или добавьте else ++i.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...