Почему последний символ читается 2 раза - C (СИ)

Узнай цену своей работы

Формулировка задачи:

int main() {
    
    FILE *fp = fopen("D:\\test.txt", "rb");
    unsigned short int ch = 0;
    char bin[9] = {0};
 
    if(fp != NULL) {
 
        while(!feof(fp)) {
            fread(&ch, 1, 1, fp);
            dec2bin(ch, bin);
            printf("%s %d %c\n", bin, ch, ch);
        }
 
    }
    printf("\n");
    return 1;
}
dec2bin из bin делает строку, двоичный формат кода символа

Решение задачи: «Почему последний символ читается 2 раза»

textual
Листинг программы
while(fread(&ch, 1, 1, fp))
{
   dec2bin(ch, bin); /* поразумеваем, что dec2bin всегда отрабатывает без ошибок */
   if(printf("%s %d %c\n", bin, ch, ch) < 0)
   {
       report_error("printf");
       do_something_on_error("printf");
   }
}
 
if(ferror(fp))
{
   report_error("fread");
   do_something_on_error("fread");
}

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

  1. ch объявлен как символ, и он считывается из файла с помощью функции fread().
  2. Функция dec2bin() преобразует числовое значение ch в двоичное представление и сохраняет его в переменной bin.
  3. С помощью функции printf() выводится двоичное представление bin, числовое значение ch и символ ch.
  4. Если printf() возвращает значение меньше нуля, значит произошла ошибка и мы переходим к блоку обработки ошибок.
  5. Если файл закрыт неудачно, то есть ошибка чтения, мы также переходим к блоку обработки ошибок.
  6. Если в блоке обработки ошибок происходит ошибка, то вызывается функция report_error(), которая выводит сообщение об ошибке.
  7. Если происходит ошибка чтения или записи, вызывается функция do_something_on_error(), которая выполняет дополнительные действия при возникновении ошибки.
  8. Если происходит ошибка чтения файла, вызывается функция report_error(fread) для вывода сообщения об ошибке чтения файла.
  9. Если происходит ошибка чтения файла, вызывается функция do_something_on_error(fread) для выполнения дополнительных действий при возникновении ошибки чтения файла.

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


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

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

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