Сравнение пользовательской строки ввода со строкой из текстового файла в c создает бесконечный цикл - PullRequest
0 голосов
/ 16 декабря 2018

Я пытаюсь стать лучше в программировании в целом и на C в частности, и я пишу небольшую текстовую приключенческую игру.Я читаю строку, введенную пользователем, т.е. LOOK room, и сравниваю ее с txt-файлом со списком команд для этого конкретного раздела.

Когда я читаю из текстового файла, у меня есть счетчик, который отслеживает, какая строка читается, когда сопоставление установлено, я преобразую номер строки в символ и объединяю его в "outside.txt"так что, когда вводится правильная команда, она будет читать из правильного файла, т. е. LOOK room будет загружать текст из 1outside.txt и т. д.

Однако, при вводе чего-либо, он просто зацикливается на «Я не понимаю» вечно.Любое объяснение того, почему или конструктивные комментарии к моему коду приветствуются, особенно если я неправильно понимаю, как файлы и / или строки в c.

    int mansionOutside(void)
    {
        int stop = 1;
        char choice[25];
        char word_match[25];
        char text_line[73];
        char line1[25];
        char temp[2];
        int counter;
        FILE *fptr;
        fptr = fopen("mansion_commands.txt", "r");
        if (fptr == NULL)
        {
            printf("ERROR!");
        }
        else
        {
            while (stop == 1)
            {   
                printf("\n");
                fgets(choice, sizeof choice, stdin);

                while (fgets (line1, 25, fptr)!= NULL)
                {
                    if (strcmp(line1, choice) == 0)
                    {
                        printf("%s\n", line1);
                        stop = 0;
                        break;
                    }
                    else
                    {
                        counter++;
                        printf("%s + %s\n", line1, choice);
                    }
                }

                if  (stop == 1)
                {
                    printf("I dont understand\n");
                    counter = 1;
                }
            }
            fclose(fptr);
            counter = counter + '0';
            temp[0] = counter;
            temp[1] = '\0';

            strncat(word_match, temp , 1);
            strcat(word_match, ".txt");

            fptr = fopen(word_match, "r");
            if (fptr == NULL)
            {
                printf("ERROR!\n");
            }
            else
            {
                printf("Debugging : File opened Successfully\n");

                while (fgets (text_line, 72, fptr) != NULL)
                {
                    printf("%s", text_line);
                    //delay(2);
                }
            }
        }
    }

РЕДАКТИРОВАТЬ: принял предложения по улучшению, чтобы избежать переполнения буфера, таких какиспользуя> fgets, но я думаю, что я что-то упустил.Теперь, если я введу что-либо, содержащееся в файле, он работает нормально.Однако, если я что-то ввожу неправильно, то при повторном запросе что-то корректно, он пропускает весь внутренний цикл while и сразу переходит к «Я не понимаю».Вот что происходит, когда мой ввод выглядит как LOOK room, а затем LOOK mansion.

sampledebugginh

...