#include #include #include #include #include #include "questions.h" #include "utils.h" int main(void) { srand((unsigned)time(NULL)); // utwórz katalog data/ jeśli nie istnieje struct stat st = {0}; if (stat("data", &st) == -1) { #ifdef _WIN32 _mkdir("data"); #else mkdir("data", 0755); #endif } QuestionSet qs; if (load_questions("data/questions.txt", &qs) != EXIT_SUCCESS) { fprintf(stderr, "Error: cannot load questions file\n"); return EXIT_FAILURE; } FILE *csv = fopen("data/results.csv", "a"); if (!csv) { perror("CSV open"); free_questions(&qs); return EXIT_FAILURE; } int limit = 0; printf("Time limit (sec, 0 = unlimited): "); if (scanf("%d", &limit) != 1) limit = 0; wait_enter(NULL); size_t total = 0, correct = 0; char cont = 'y'; while (cont == 'y' || cont == 'Y') { const char *g = qs.general[rand_index(qs.general_count)]; const char *m = qs.major[rand_index(qs.major_count)]; print_line(); printf("GENERAL:\n%s\n\nMAJOR:\n%s\n", g, m); print_line(); wait_enter("Press ENTER to start..."); time_t start = time(NULL); wait_enter("Press ENTER when done..."); double duration = difftime(time(NULL), start); if (limit > 0 && duration > limit) printf("Time exceeded!\n"); char ans = ask_yes_no("Correct? (y/n): "); if (ans == 'y' || ans == 'Y') correct++; total++; char ts[32]; now_str(ts, sizeof(ts)); fprintf(csv, "\"%s\",\"%s\",\"%s\",%c,%.0f\n", ts, g, m, ans, duration); printf("Score: %zu/%zu (%.1f%%)\n", correct, total, total ? (double)correct / total * 100 : 0.0); cont = ask_yes_no("Next? (y/n): "); } printf("\nSession score: %.1f%%\n", total ? (double)correct / total * 100 : 0.0); fclose(csv); free_questions(&qs); return EXIT_SUCCESS; }