diff --git a/du5/program.c b/du5/program.c index f4503b9..75ac44c 100644 --- a/du5/program.c +++ b/du5/program.c @@ -11,7 +11,7 @@ typedef struct Tree { struct Tree *no; } Tree; -// читання дерева +// читання дерева (preorder) Tree* readTree() { char line[SIZE]; @@ -21,17 +21,17 @@ Tree* readTree() { if (line[0] == '\0') return NULL; - Tree *node = malloc(sizeof(Tree)); + Tree *node = (Tree*)malloc(sizeof(Tree)); node->yes = NULL; node->no = NULL; if (line[0] == '*') { node->isAnswer = 1; - int i = 1; - while (line[i] == ' ') i++; + char *p = line + 1; + while (*p == ' ') p++; - strcpy(node->text, line + i); + strcpy(node->text, p); } else { node->isAnswer = 0; strcpy(node->text, line); @@ -43,16 +43,16 @@ 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->isAnswer) return 1; @@ -60,7 +60,7 @@ int Leaves(Tree *node) { return Leaves(node->yes) + Leaves(node->no); } -// free +// очищення пам’яті void freeTree(Tree *node) { if (!node) return; @@ -69,7 +69,7 @@ void freeTree(Tree *node) { free(node); } -// запуск +// гра void start(Tree *node) { char input[SIZE]; @@ -82,20 +82,21 @@ void start(Tree *node) { return; } - if (input[0] == 'a') { + int i = 0; + while (input[i] == ' ' || input[i] == '\t') i++; + + if (input[i] == 'a') { node = node->yes; - } - else if (input[0] == 'n') { + } else if (input[i] == 'n') { node = node->no; - } - else { + } else { printf("Nerozumiem\n"); return; } } if (node && node->isAnswer) { - printf("* %s\n", node->text); + printf("*%s\n", node->text); printf("Koniec\n"); } }