diff --git a/du5/program.c b/du5/program.c index 74d8546..8310b4b 100644 --- a/du5/program.c +++ b/du5/program.c @@ -11,19 +11,16 @@ typedef struct Tree { struct Tree *no; } Tree; -// читання дерева у preorder Tree* readTree() { char line[SIZE]; if (fgets(line, SIZE, stdin) == NULL) return NULL; - // кінець дерева = порожній рядок - if (strcmp(line, "\n") == 0) return NULL; - - // прибрати \n і \r line[strcspn(line, "\r\n")] = 0; - Tree *node = malloc(sizeof(Tree)); + if (line[0] == '\0') return NULL; + + Tree *node = (Tree*)malloc(sizeof(Tree)); node->yes = NULL; node->no = NULL; @@ -44,39 +41,35 @@ Tree* readTree() { return node; } -// перевірка пустого рядка після дерева int EmptyLine() { char line[SIZE]; if (fgets(line, SIZE, stdin) == NULL) return 0; - return strcmp(line, "\n") == 0; + return line[0] == '\n'; } -// підрахунок листів int Leaves(Tree *node) { - if (!node) return 0; + if (node == NULL) return 0; if (node->isAnswer) return 1; return Leaves(node->yes) + Leaves(node->no); } -// звільнення пам’яті void freeTree(Tree *node) { - if (!node) return; + if (node == NULL) return; freeTree(node->yes); freeTree(node->no); free(node); } -// запуск системи void start(Tree *node) { char input[SIZE]; - while (node && !node->isAnswer) { + while (node != NULL && node->isAnswer == 0) { printf("%s\n", node->text); if (fgets(input, SIZE, stdin) == NULL) { - printf("Koniec vstupu\n"); + printf("Nespravny vstup\n"); return; } @@ -88,13 +81,13 @@ void start(Tree *node) { } else if (input[i] == 'n') { node = node->no; } else { - printf("Nerozumiem\n"); + printf("Nespravny vstup\n"); return; } } if (node && node->isAnswer) { - printf("* %s\n", node->text); + printf("*%s\n", node->text); printf("Koniec\n"); } } @@ -104,17 +97,11 @@ int main() { Tree *root = readTree(); - if (!root) { + if (root == NULL) { printf("Chyba nacitania\n"); return 0; } - if (!EmptyLine()) { - printf("Chyba nacitania\n"); - freeTree(root); - return 0; - } - int count = Leaves(root); printf("Pozna %d druhov ovocia a zeleniny.\n", count);