strcmp(fgets(str, MAX_LEN, pFile),"\0")
неправильно во многих отношениях. Например, аргумент strcmp
должен быть строкой (нулевой указатель которой не является), но fgets
возвращает NULL
в случае ошибки или конца файла. Вам нужно убедиться, что он не вернул NULL
, а затем вы можете сравнить строку в str
. Однако нет необходимости strcmp
против "\0"
(или, в данном случае эквивалентно, ""
), чтобы определить конец файла, потому что именно тогда fgets
возвращает NULL
.
Другая проблема заключается в том, что вы читаете как с fscanf
, так и с fgets
- выберите один и придерживайтесь его. Я рекомендую fgets
, поскольку, как правило, легче получить правильную информацию (например, при неверном вводе намного сложнее восстановиться после fscanf
и убедиться, что вы не застряли в бесконечном l oop, но при этом не потеряете ввод ). Конечно, вам нужно проанализировать целое число из str
после fgets
, но для этого есть много стандартных функций (например, strtol
, atoi
, sscanf
).
Дон не используйте !feof(file)
в качестве условия l oop (см., например, Почему «while (! feof (file))» всегда неверно? ). Если вы читаете с fgets
, завершите l oop, когда он вернет NULL
.