Последний байт выводится два раза с 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 увеличивается на единицу в каждой итерации цикла.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д