Проблема в том, что fgets отображает неправильно, если в конце файла нет новой строки. Предположим, если у меня есть 2 текстовых файла, как показано ниже,
содержимое text1.txt:
German Hoy
43
68
Jesse Boster
88
29
- обратите внимание, что файл полностью заканчивается после 29. после 29 строки нет.
содержимое text2.txt:
German Hoy
43
68
Jesse Boster
88
29
- обратите внимание, что после 29 есть еще одна строка.
Моя проблема:
программа работает правильно для text2.txt, когда после конца файла есть еще одна строка. Однако это не так, если у меня нет еще одной строки в конце файла, например text1.txt. Как я могу это исправить? Я хочу иметь тот же результат независимо от наличия или отсутствия еще одной строки в конце файла. (В обоих случаях он должен выводить одинаковый результат)
Ниже показана часть исходного кода, относящаяся к проблеме:
while( fgets (s, 60, file)!=NULL ) {
s[strlen(s)-1] = '\0';
strcpy(tempName, s);
fgets(s, 60, file);
s[strlen(s)-1] = '\0';
sscanf(s, "%d", &tempMid);
fgets(s, 60, file);
s[strlen(s)-1] = '\0';
sscanf(s, "%d", &tempFinal);
setup(tempName, tempMid, tempFinal);
}
Используется система LINUX
fgets()
, чтобы убедиться, что вы не получили отчет EOF. Вы должны показать нам MCVE (минимальный воспроизводимый пример) — например, ваш вызовsetup()
можно заменить на подходящийprintf()
звонок. Кроме того, на какой платформе вы работаете? Windows против Unix-подобных может иметь значение. - person Jonathan Leffler   schedule 05.03.2017s[strlen(s)-1] = '\0';
заменить наs[strcspn(s, "\n")] = '\0';
. Также второй и третийs[strlen(s)-1] = '\0';
не нужны. - person BLUEPIXY   schedule 05.03.2017