#include #include #include typedef struct Uzol { char *text; struct Uzol *ano; struct Uzol *nie; } Uzol; int pocet_tovarov = 0; Uzol* vytvor_uzol(const char *text) { Uzol *uzol = (Uzol *)malloc(sizeof(Uzol)); uzol->text = strdup(text); uzol->ano = NULL; uzol->nie = NULL; return uzol; } Uzol* nacitaj_strom() { char riadok[256]; if (fgets(riadok, sizeof(riadok), stdin) == NULL || riadok[0] == '\n') { return NULL; } riadok[strcspn(riadok, "\n")] = '\0'; if (riadok[0] == '*') { pocet_tovarov++; return vytvor_uzol(riadok + 1); } Uzol *uzol = vytvor_uzol(riadok); uzol->ano = nacitaj_strom(); uzol->nie = nacitaj_strom(); return uzol; } void vypis_otazku(Uzol *uzol) { if (uzol == NULL) { return; } printf("%s\n", uzol->text); if (uzol->ano == NULL && uzol->nie == NULL) { return; } printf("Odpovedajte 'a' pre prvu moznost alebo 'n' pre druhu moznost.\n"); char odpoved; while (1) { odpoved = getchar(); // čítame odpoveď while (getchar() != '\n'); // vyčistenie bufferu if (odpoved == 'a' || odpoved == 'n') { break; // Odpoveď je platná, ukončíme cyklus } else { printf("Nerozumiem\n"); } } if (odpoved == 'a') { if (uzol->ano != NULL) { vypis_otazku(uzol->ano); } } else if (odpoved == 'n') { if (uzol->nie != NULL) { vypis_otazku(uzol->nie); } } } void spusti_system(Uzol *strom) { printf("Expert z bufetu to vie.\n"); printf("Pozna %d druhov ovocia a zeleniny.\n", pocet_tovarov); vypis_otazku(strom); printf("Koniec\n"); } int main() { Uzol *strom = nacitaj_strom(); if (strom == NULL) { printf("Chyba: Nepodarilo sa otvorit subor s pravidlami.\n"); return 1; } spusti_system(strom); return 0; }