Почему последний символ читается 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; }
Решение задачи: «Почему последний символ читается 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"); }
Объяснение кода листинга программы
ch
объявлен как символ, и он считывается из файла с помощью функцииfread()
.- Функция
dec2bin()
преобразует числовое значениеch
в двоичное представление и сохраняет его в переменнойbin
. - С помощью функции
printf()
выводится двоичное представлениеbin
, числовое значениеch
и символch
. - Если
printf()
возвращает значение меньше нуля, значит произошла ошибка и мы переходим к блоку обработки ошибок. - Если файл закрыт неудачно, то есть ошибка чтения, мы также переходим к блоку обработки ошибок.
- Если в блоке обработки ошибок происходит ошибка, то вызывается функция
report_error()
, которая выводит сообщение об ошибке. - Если происходит ошибка чтения или записи, вызывается функция
do_something_on_error()
, которая выполняет дополнительные действия при возникновении ошибки. - Если происходит ошибка чтения файла, вызывается функция
report_error(
fread)
для вывода сообщения об ошибке чтения файла. - Если происходит ошибка чтения файла, вызывается функция
do_something_on_error(
fread)
для выполнения дополнительных действий при возникновении ошибки чтения файла.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д