Я пытаюсь стать лучше в программировании в целом и на 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.