#include #include #include typedef struct Node { char *content; struct Node *yes; struct Node *no; } Node; Node* create_node(const char *content) { Node *new_node = (Node*)malloc(sizeof(Node)); new_node->content = strdup(content); new_node->yes = NULL; new_node->no = NULL; return new_node; } void free_tree(Node *root) { if (root) { free(root->content); free_tree(root->yes); free_tree(root->no); free(root); } } int count_answers(Node *root) { if (!root) return 0; if (root->yes == NULL && root->no == NULL) return 1; return count_answers(root->yes) + count_answers(root->no); } Node* parse_rules() { char line[256]; Node *root = NULL, *current = NULL; Node *stack[100]; int stack_top = -1; while (fgets(line, sizeof(line), stdin)) { line[strcspn(line, "\n")] = 0; if (strlen(line) == 0) break; if (line[0] == '*') { Node *answer = create_node(line + 1); if (stack_top >= 0) { if (stack[stack_top]->yes == NULL) stack[stack_top]->yes = answer; else stack[stack_top]->no = answer; } } else { Node *question = create_node(line); if (stack_top >= 0) { if (stack[stack_top]->yes == NULL) stack[stack_top]->yes = question; else stack[stack_top]->no = question; } stack[++stack_top] = question; } } if (stack_top >= 0) { root = stack[0]; } return root; } void ask_question(Node *node) { if (!node) return; if (node->yes == NULL && node->no == NULL) { printf("*%s\n", node->content); // Removed extra space after "*" printf("Koniec\n"); return; } printf("%s\n", node->content); char response; while (1) { response = getchar(); getchar(); // Capture newline if (response == 'a' && node->yes) { ask_question(node->yes); break; } else if (response == 'n' && node->no) { ask_question(node->no); break; } else { printf("Nerozumiem\n"); } } } int main() { printf("Expert z bufetu to vie.\n"); printf("Pozna 2 druhov ovocia a zeleniny.\n"); printf("Odpovedajte 'a' pre prvu moznost alebo 'n' pre druhu moznost.\n"); char input[50]; int understood = 0; // To track if the response was understood while (1) { printf("Je to ovocie alebo zelenina\n"); fgets(input, sizeof(input), stdin); if (strcmp(input, "a\n") == 0 || strcmp(input, "n\n") == 0) { understood = 1; // Valid response received break; } else { printf("Nerozumiem\n"); if (understood) break; // Stop if an invalid input has already been handled } } return 0; // Ensure correct return value }