Opened 5 years ago

Closed 4 years ago

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

WW_io

Reported by: Roman Venediktov Owned by: Sokolov Viacheslav
Component: WW_c_io Version: 3.0
Keywords: Cc:

Description


Change History (5)

comment:1 Changed 5 years ago by Sokolov Viacheslav

Type: ожидается проверкаожидаются исправления
 37         int a_bytes[BYTES_IN_NUMBER];
 38         int b_bytes[BYTES_IN_NUMBER];
 39         while ((a_bytes[0] = fgetc(input)) != EOF) {
 40             for (int i = 1; i < BYTES_IN_NUMBER; ++i) {
 41                 a_bytes[i] = fgetc(input);
 42             }
 43             for (int j = 0; j < BYTES_IN_NUMBER; ++j) {
 44                 b_bytes[j] = fgetc(input);
 45             }
 46             int a = 0;
 47             int b = 0;
 48             int multiplier = 1;
 49             for (int k = 0; k < BYTES_IN_NUMBER; ++k) {
 50                 a += multiplier * a_bytes[k];
 51                 b += multiplier * b_bytes[k];
 52                 multiplier *= 256;
 53             }
 54             add_point(l, a, b);
 55         }

copy-paste отвратителен!
в этом месте не очень сложно декомпозировать, что уменьшит объем кода, повысит его читаемость, надежность, переиспользуемость

Да и вообще было бы прекрасно вынести содержимое каждого случая в именованную функцию.
main сократится, читать станет приятнее.

BYTES_IN_NUMBER - отличная идея.
256 тоже стоит именовать (BYTE ?)

fopen может не сработать,

FYI https://stackoverflow.com/questions/3353214/fopen-without-fclose-in-c

Если бонус не сделан не из-за нехватки времени/желания, а потому что непонятно - задайте вопрос!

comment:2 Changed 5 years ago by Roman Venediktov

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

comment:3 Changed 5 years ago by Sokolov Viacheslav

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

write_text_number неудачное название, из него невозможно угадать, что же функция делает

Сейчас в целом все хорошо.

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

comment:4 Changed 4 years ago by Roman Venediktov

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

Ошибки в fprintf/... всегда детектируются просто if-ами?

Опциональные параметры в --help пишутся в {} или <>?

comment:5 Changed 4 years ago by Sokolov Viacheslav

Resolution: задача сдана
Status: assignedclosed

Ошибки в fprintf/... всегда детектируются просто if-ами?

вопрос не понял, сейчас все правильно

Опциональные параметры в --help пишутся в {} или <>?

в общем-то на усмотрение автора. Лишь бы было понятно.

 82 int counter(intrusive_node *node, void *data) {
 83     assert(node != NULL);
 84     assert(data != NULL);
 85     (void) node;
 86     *((int *) data) += 1;
 87     return 1;
 88 }
 89 
 90 void count_points_number(intrusive_list *l) {
 91     assert(l != NULL);
 92     size_t count = 0;
 93     apply(l, &counter, (void *) &count);
 94     printf("%lu\n", count);
 95 }
 96 

в одном месте int, в другом size_t.
size_t корректно печатать с помощью "%zu", иначе есть предположение о том, в какой тип size_t раскрывается.

Вам стоит поработать над английским, сейчас это так называемый runglish.

write_bin, write_text стоило бы реализовать через apply.

Note: See TracTickets for help on using tickets.