Последний байт выводится два раза с feof() - C (СИ)
Формулировка задачи:
Последний байт выводится два раза (ну и размер, конечно на 1 больше реального выводится. Объясните пож. почему такое происходит?
FILE *fp;
char *SrcFileName;
SrcFileName = strcat(GetExeDir(argv[0]), "test.dat");
if ((fp = fopen(SrcFileName, "rb")) == NULL)
{
printf("Can't open %s\n", SrcFileName);
system("PAUSE");
exit(1);
};
typedef unsigned char byte;
byte symb;
int i = 0;
while (!feof(fp))
{
fread(&symb, 1, 1, fp);
printf("symbol: '%c'; hex: '%X'\n", symb, symb);
i++;
};
fclose(fp);
printf("%d bytes.", i);Решение задачи: «Последний байт выводится два раза с feof()»
textual
Листинг программы
while (1)
{
fread(&symb, 1, 1, fp);
if (feof(fp))
break;
printf("symbol: '%c'; hex: '%X'\n", symb, symb);
i++;
};
Объяснение кода листинга программы
- Задана бесконечная петля while(1).
- В каждой итерации цикла считывается один символ из файла fp с помощью функции fread() в переменную symb.
- Проверяется условие feof(fp). Если оно истинно, то значит достигнут конец файла, и цикл прерывается.
- Выводится символ symb в десятичном формате и его шестнадцатеричное представление.
- Переменная i увеличивается на единицу в каждой итерации цикла.