Opened 5 years ago

Closed 4 years ago

#376 closed ожидается проверка (задача сдана)

WW #5

Reported by: Gleb Marin Owned by: Sokolov Viacheslav
Component: WW_c_io Version: 2.0
Keywords: Cc:

Description


Change History (3)

comment:1 Changed 5 years ago by Sokolov Viacheslav

Type: ожидается проверкаожидаются исправления

Нужно проверить, что указатели ненулевые.

write_bytes , write_text желательно реализовать через apply.

Нужно поправить на допбалл:
fprintf / fwrite может не получиться, если на файловой системе место кончилось.
Нужно как-нибудь специфицировать поведение программы в таком случае - как минимум сообщать об этом с помощью кода возврата. Для этого стоит либо поменять сигнатуру apply (протащить возможность рапортовать ошибку), либо использовать exit. Кроме того, стоит решить, что делать с частично записанными данными - либо оставить, как есть, либо удалить файл целиком, либо оставить только успешно записанные точки, но в любом случае поведение должно быть донесено до конечного пользователя утилиты либо комментарием в main, либо дописать в --help.

116         fread(&x, 3, 1, input);
117         fread(&y, 3, 1, input);
118         if (x & (1 << 23))
119         {
120             ((char *)&x)[3] = 255;
121         }
122         if (y & (1 << 23))
123         {
124             ((char *)&y)[3] = 255;
125         }

1) стоит вынести операцию в отдельную функцию (чтобы не дублировать)
2) здесь явно используется способ представления знакового числа, что не соответствует текущей версии Стандарта языка (не гарантируется). Желательно привести в соответсвтие со Стандартом.

Фрагмент

261         if (argc < 5)
262         {
263             printf("%s\n", ERROR_INPUT_TEXT);
264             remove_all_points(&list);
265             return ERROR_INPUT;
266         }  

повторяется много раз, стоит с этим что-нибудь сделать (вынести в отдельную функцию / макрос)

На мой взгляд ключевое, на что Вам сейчас стоит обращать внимание - это как бороться с дублированием кода, повышать модульность, переиспользуемость кода.

В данный момент работает, как требуется.

comment:2 Changed 4 years ago by Gleb Marin

Type: ожидаются исправленияожидается проверка
Version: 1.02.0

comment:3 Changed 4 years ago by Sokolov Viacheslav

Resolution: задача сдана
Status: assignedclosed
147         fread(x_bytes, 3, 1, input);
148         fread(y_bytes, 3, 1, input);

здесь корректнее было бы 1, 3

read_bytes сейчас реализован не совсем некорректно, если input пустой (исполнение зайдет внутрь while (!feof(input)) и будет произведена попытка записи from_3_to_4_bytes, хотя массивы инициализированы мусором). valgrind ругается.

В main много дублирующегося кода

В print-функциях для apply можно было бы возвращать статус printf, да и в read можно было бы обработать ошибки чтения

Note: See TracTickets for help on using tickets.