Opened 5 years ago
Closed 4 years ago
#345 closed ожидаются исправления (задача НЕ сдана)
WW #3
Reported by: | egipti.pavel | Owned by: | egipti.pavel |
---|---|---|---|
Component: | WW_intrusive_list | Version: | 2.0 |
Keywords: | Cc: |
Description
Change History (5)
comment:1 Changed 5 years ago by
Resolution: | → задача НЕ сдана |
---|---|
Status: | assigned → closed |
Type: | ожидается проверка → ожидаются исправления |
comment:2 Changed 4 years ago by
Resolution: | задача НЕ сдана |
---|---|
Status: | closed → reopened |
Type: | ожидаются исправления → ожидается проверка |
Version: | 1.0 → 2.0 |
comment:3 Changed 4 years ago by
Status: | reopened → assigned |
---|
comment:4 Changed 4 years ago by
Owner: | changed from Egor Suvorov to egipti.pavel |
---|---|
Type: | ожидается проверка → ожидаются исправления |
Как обсудили в личке, тут нужен clist.c
не из lab_05
, а доделанный/переделанный ваш.
По корректности было бы 6/7:
<stddef.h>
стоит включать в том же месте, где объявляетсяcontainer_of
. Чтобы можно было включить заголовок и сразу заработало.- Реализация множества точек должна находиться в
main.c
,clist.c
— это список в общем виде. - Если скормить на вход очень длинную команду, то переполнится буфер
str
, будет UB. - Если скормить на вход очень длинную команду, то
Unknown command
выведется несколько раз.
Стиль было бы 1/3:
- Местами отступы и пробелы поехали (
clist.h
: строчки 8 и 19 в частности, но и в целом). - В
main.c
цепочкуelse if
лучше писать без фигурных скобок, чтобы не было диагонального кода:if (...) { ... } else if (...) { ... } else if (...) { ... } else { ... }
stroka
— название не по делу.240
— размер буфера не по делу, можно точнее.strcmp() == 0
лучше записать как!strcmp
first
/second
— есть названия получше для координат точек.- Мойте тарелки перед едой — считывайте команду один раз в начале цикла, а не один раз перед циклом и один раз в конце. Чтобы дублирования кода не было. Оно как раз вас укусило в плане корректности: в одном месте размер буфера указан, а в другом — нет.
Итого, если сделаете так же хорошо со своей реализацией, было бы 7/10 в дорешке.
comment:5 Changed 4 years ago by
Resolution: | → задача НЕ сдана |
---|---|
Status: | assigned → closed |
Note: See
TracTickets for help on using
tickets.
Корректность 1/8 (только за Makefile):
while (strcmp(...))
начинает читать из неинициализированного буфераstring
.add_point
выделяется память не того размера:sizeof new
возвращает размер указателя.add
.print
выводит лишний пробел в конце строки.Unknown command
выведется несколько раз.rm
: не в том порядке считываются координаты.Стиль 1/4:
while (!strcmp(...))
лучше было бы поставитьwhile (true)
, а по командеexit
делатьbreak;
. Сейчас так и делаете, но зачем-то стоит лишнее условие.x
иy
.string
-->command
.struct intrusive_list
в куче, можно просто сделать локальную переменную.int x, y;
вместоint x,y;
x[a + b] = y[c];
malloc
: просто встройтеintrusive_node
как поле вintrusive_list
.!strcmp(s, "rm")
работает.add_node
: лучше модифицировать не неlist->head->next
иlist->head->next->prev
, аnode->prev->next
иnode->next->prev
для симметрии.if (x != NULL)
, а простоif (x)
.remove
-->deinit_list
для симметрии сinit_list
. Или хотя быremove_list
.#include <stdlib.h>"
, а не#include "stdlib.h"
, это библиотека не в вашем проекте.&(a->b)
скобки не нужны.main
лучше сделать цепочкуelse if
, а не один раз дублировать все условия в конце.strcmp(a, b) == 0
, а!strcmp(a, b)
. Аналогично сstrcmp(a, b) != 0
: простоstrcmp(a, b)
.size
в командеlen
.Если хотите дорешать — смело переоткрывайте тикет.