Последний байт выводится два раза с 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++;
    };

Объяснение кода листинга программы

  1. Задана бесконечная петля while(1).
  2. В каждой итерации цикла считывается один символ из файла fp с помощью функции fread() в переменную symb.
  3. Проверяется условие feof(fp). Если оно истинно, то значит достигнут конец файла, и цикл прерывается.
  4. Выводится символ symb в десятичном формате и его шестнадцатеричное представление.
  5. Переменная i увеличивается на единицу в каждой итерации цикла.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.143 из 5
Похожие ответы