Opened 5 years ago
Closed 4 years ago
#396 closed ожидаются исправления (задача сдана)
WW #5
Reported by: | vorobeva.polina | Owned by: | vorobeva.polina |
---|---|---|---|
Component: | WW_c_io | Version: | 3.0 |
Keywords: | Cc: |
Description
Привет. Не совсем понимаю, как сделать более хорошую обработку аргументов командной строки - писать много if'ов не хочется, а если передавать (void*)argv[i] вместо print - происходит что-то очень странное.
Сделаны print (через apply), чтение текстовых файлов и вывод в них.
Change History (10)
comment:1 Changed 5 years ago by
comment:2 Changed 5 years ago by
Owner: | changed from Egor Suvorov to vorobeva.polina |
---|---|
Type: | ожидается проверка → ожидаются исправления |
Аргументы командной строки норм, только лучше ещё i++
делать после очередной операции. А то вдруг будет файл с именем loadtext
.
Корректность 4.5/7 :
- Вообще в задании все аргументы стоят на фиксированных местах, так что у вас цикл сломается при загрузке из файла с именем
loadtext
(+0.5).
Стиль 1.5/3:
- В
apply
объявите переменнуюnode
внутриfor
. - Удалите закомментированный код.
- Пробелы между бинарными операторами (пройдитесь автоформаттером).
- Объявите
int x, y;
сразу перед циклом. - Не пишите пробел между
%d
вscanf
. strcmp() == 0
- просто!strcmp()
comment:4 Changed 4 years ago by
Owner: | changed from vorobeva.polina to Egor Suvorov |
---|---|
Type: | ожидаются исправления → ожидается проверка |
Version: | 1.0 → 2.0 |
Не совсем поняла, почему цикл может сломаться при загрузки данных из файла loadtext... Если его передавать без расширения - ломается не цикл, а если с расширением, то все все равно будет ок.
И еще не совсем поняла пункт 1 из стиля. Если node убрать в for, то получится, что я обращаюсь еще к несуществующей переменной.
comment:5 Changed 4 years ago by
Owner: | changed from Egor Suvorov to vorobeva.polina |
---|---|
Type: | ожидается проверка → ожидаются исправления |
Про цикл: не очень точно посмотрел, да. Происходило бы следующее: ./lab_05 loadtext loadtext count
, загружаете данные из файла loadtext
, а на следующей итерации цикл снова видит loadtext
и пытается открыть файл с именем count
. Не получается, после этого наверняка UB, когда передаём NULL
в fscanf
.
Про стиль: можно написать for (intrusive_node *node = head->next; ......
. Посмотрите, получится ли лучше, отпишитесь в тикете.
По корректности 5.5/7:
- Чтение из бинарных файлов вызывает UB.
make_bytes
— UB, у вас не строки в стиле Си.strcpy
совсем не по делу получается.
По стилю 1.5/3:
- Неясно, зачем проверка
i == 1
приloadtext
. Как минимум, её нет приloadbin
, получается несимметрично. i++
для командыcount
не нужен. Вы так пропустите аргумент послеcount
(который, судя по остальному коду, вы считаете допустимым).loadtext
— лучше не!= EOF
, а== 2
. Чтобы остановиться в том случае, если в файле какая-то фигня, а не продолжить добавлять левые точки.fnt
-->format
.- Пробелов в
loadbin
не хватает, автоформаттер. savebin
: неясно, откуда взялось число 18 в размере массивов. Неясно, зачем два отдельных массива.savetext
принимает неfile_name
.- Несимметрично:
savetext
— это функция дляapply
, а вотsavebin
— уже отдельная функция. Сделайте везде однообразно.
comment:6 Changed 4 years ago by
Owner: | changed from vorobeva.polina to Egor Suvorov |
---|---|
Type: | ожидаются исправления → ожидается проверка |
Version: | 2.0 → 3.0 |
Убрала intrusive_node в начальное условие for'а)
По корректности - у меня был очень неправильный make_bytes (я неправильно поняла условие про 6N байт), который и вызывал UB как в savebin, так и в loadbin. Вроде, исправила)
По стилю - пункты 1-5 переделаны;
В 6 я не очень понимаю, как там можно одним массивом обойтись... Поэтому использую 2;
7-8: сделала единообразно - везде отдельные функции, через apply выражены только print и count:)
comment:7 Changed 4 years ago by
Owner: | changed from Egor Suvorov to vorobeva.polina |
---|---|
Type: | ожидается проверка → ожидаются исправления |
По корректности 5.5/7:
- Всё ещё возникает UB при выводе точек из бинарного файла. Исходная проблема — в
loadbin
. Валгринд ловит.
По стилю 2/3:
- Пробелы, автоформаттер.
- В
make_bytes
параметр — не строчка, входное число — скорее неn
, аvalue
(потому что не количество чего-то, а просто значение). Вместо циклаfor
лучшеmemmove
. - Одним массивом можно сделать, если передавать в качестве параметра
make_bytes
не начало массива, а середину. - Добавьте пустую строку между циклом парсинга аргументов и деинициализацией.
comment:8 Changed 4 years ago by
Owner: | changed from vorobeva.polina to Egor Suvorov |
---|---|
Type: | ожидаются исправления → ожидается проверка |
UB вроде как исчез, valgrind у меня не ругается:)
comment:9 Changed 4 years ago by
Owner: | changed from Egor Suvorov to vorobeva.polina |
---|---|
Type: | ожидается проверка → ожидаются исправления |
Корректность есть, 7/7.
По стилю 2/3, актуальны пробелы вокруг всяких =
. Ещё:
make_bytes
можно вообще безmemmove
, просто записать напрямую вdata
.
comment:10 Changed 4 years ago by
Resolution: | → задача сдана |
---|---|
Status: | assigned → closed |
Добавлен count