diff --git a/du6/program.c b/du6/program.c index f144f8f..7dbc15c 100644 --- a/du6/program.c +++ b/du6/program.c @@ -10,9 +10,9 @@ typedef struct tree { struct tree *right; } Tree; -int valid_db = 1; // flag pre validitu databazy +int valid_db = 1; -// odstranit koncovy znak \n +//odstranit koncovy znak void strip_newline(char *s) { int len = strlen(s); if (len > 0 && s[len-1] == '\n') @@ -26,6 +26,7 @@ Tree* read_tree() { if (!fgets(buffer, SIZE, stdin)) return NULL; + // prazdny riadok -> koniec if (strcmp(buffer, "\n") == 0) return NULL; @@ -36,23 +37,23 @@ Tree* read_tree() { strcpy(node->value, buffer); - // list + // odpoved -> list if (buffer[0] == '*') { return node; } - // očakávame presne 2 potomkov + // inak nacitat oboch potomkov node->left = read_tree(); if (!node->left) { - valid_db = 0; + valid_db = 0; free(node); return NULL; } node->right = read_tree(); if (!node->right) { - valid_db = 0; - destroy_tree(node->left); + free(node->left); + valid_db = 0; free(node); return NULL; } @@ -84,15 +85,19 @@ void run_system(Tree *node) { // list -> koniec if (!node->left && !node->right) { - printf("Koniec\n"); + printf("Koniec\n"); return; } - char c; - if (scanf(" %c", &c) != 1) { - printf("Nerozumiem\n"); - return; - } + int c; + + do { + c = getchar(); + if (c == EOF) { + printf("Koniec vstupu\n"); + return; + } + } while (c=='\n' || c=='\r' || c==' ' || c=='\t'); if (c == 'a') { run_system(node->left); @@ -106,14 +111,14 @@ void run_system(Tree *node) { int main() { Tree *root = read_tree(); - // kontrola prázdneho alebo chybného stromu + // nepodarilo sa nacitat koren -> chyba if (!root || !valid_db) { printf("Expert z bufetu to vie.\n"); - printf("Chybna databaza\n"); + printf("Chybna databaza\n"); return 0; } - // skontrolovat prazdny riadok po databaze + // skontrolovat prazdny riadok char buffer[SIZE]; if (!fgets(buffer, SIZE, stdin) || strcmp(buffer, "\n") != 0) { printf("Koniec vstupu\n");