From b8434c4e63093dbefb4c94e48cc53ba801a73529 Mon Sep 17 00:00:00 2001 From: Kevin Schellberg Date: Tue, 6 Feb 2024 14:32:51 +0100 Subject: [PATCH] =?UTF-8?q?Joker-Polishing/=C3=84nderungen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/test/results/test_casualQuiz.pass | 2 +- build/test/results/test_quizduell.pass | 2 +- build/test/results/test_timequiz.pass | 2 +- build/test/results/test_wwm.pass | 2 +- src/quizduell.c | 116 +++++++++++------------- 5 files changed, 55 insertions(+), 69 deletions(-) diff --git a/build/test/results/test_casualQuiz.pass b/build/test/results/test_casualQuiz.pass index cd3cde9..09744e0 100644 --- a/build/test/results/test_casualQuiz.pass +++ b/build/test/results/test_casualQuiz.pass @@ -11,4 +11,4 @@ :failed: 0 :ignored: 0 :stdout: [] -:time: 0.02163599999039434 +:time: 0.02230250000138767 diff --git a/build/test/results/test_quizduell.pass b/build/test/results/test_quizduell.pass index c277ff2..d4ade48 100644 --- a/build/test/results/test_quizduell.pass +++ b/build/test/results/test_quizduell.pass @@ -51,4 +51,4 @@ :failed: 0 :ignored: 0 :stdout: [] -:time: 0.05005920000257902 +:time: 0.022694699990097433 diff --git a/build/test/results/test_timequiz.pass b/build/test/results/test_timequiz.pass index ad408f5..373f638 100644 --- a/build/test/results/test_timequiz.pass +++ b/build/test/results/test_timequiz.pass @@ -11,4 +11,4 @@ :failed: 0 :ignored: 0 :stdout: [] -:time: 0.021275600010994822 +:time: 0.022485199995571747 diff --git a/build/test/results/test_wwm.pass b/build/test/results/test_wwm.pass index 8e54e6a..2d40f00 100644 --- a/build/test/results/test_wwm.pass +++ b/build/test/results/test_wwm.pass @@ -11,4 +11,4 @@ :failed: 0 :ignored: 0 :stdout: [] -:time: 0.019954899995354936 +:time: 0.020305000012740493 diff --git a/src/quizduell.c b/src/quizduell.c index 45b0c78..18dd9a6 100644 --- a/src/quizduell.c +++ b/src/quizduell.c @@ -22,82 +22,65 @@ QuizFrage erstelleFrage(const char* frage, const char* antwortA, const char* ant int spieleKategorie(Kategorie* kategorie) { size_t punktzahl = 0; - int jokerVerwendet = 0; + int jokerVerwendet = 0; // Joker-Flag für diese Kategorie for (int i = 0; i < kategorie->anzahlFragen; i++) { - #define MAX_ANSWER_LENGTH 10 - char benutzerAntwort[MAX_ANSWER_LENGTH]; + char benutzerAntwort[2]; // Platz für die Benutzereingabe und das Nullzeichen printf("\nQuestion %d:\n%s", i + 1, kategorie->fragen[i].frage); - - char jokerAntwort[10]; - - do { - printf("\nA) %s\nB) %s\nC) %s\nD) %s\n", kategorie->fragen[i].antwortA, kategorie->fragen[i].antwortB, kategorie->fragen[i].antwortC, kategorie->fragen[i].antwortD); - - if (!jokerVerwendet) { - printf("\nDo you want to use the joker? (Y/N): "); - scanf("%s", jokerAntwort); - printf(jokerAntwort); - - if (toupper(jokerAntwort[0]) == 'Y') { - if (kategorie->joker > 0) { - kategorie->joker -= 1; - jokerVerwendet = 1; - printf("Joker inserted! Two incorrect answer options were deleted.\n"); - - char korrekteAntwort = kategorie->fragen[i].korrekteAntwort; - int gestrichen = 0; - - for (char option = 'A'; option <= 'D'; option++) { - if (option != korrekteAntwort && gestrichen < 2) { - switch (option) { - case 'A': - strcpy(kategorie->fragen[i].antwortA, "XXXXXX"); - gestrichen++; - break; - case 'B': - strcpy(kategorie->fragen[i].antwortB, "XXXXXX"); - gestrichen++; - break; - case 'C': - strcpy(kategorie->fragen[i].antwortC, "XXXXXX"); - gestrichen++; - break; - case 'D': - strcpy(kategorie->fragen[i].antwortD, "XXXXXX"); - gestrichen++; - break; - } - } + printf("\nA) %s\nB) %s\nC) %s\nD) %s\n", kategorie->fragen[i].antwortA, kategorie->fragen[i].antwortB, kategorie->fragen[i].antwortC, kategorie->fragen[i].antwortD); + + // Prüfe, ob der Joker noch nicht verwendet wurde und frage den Benutzer danach + if (!jokerVerwendet) { + printf("Do you want to use the joker? (Y/N): "); + char jokerAntwort[2]; + scanf("%1s", jokerAntwort); // Benutzerantwort für den Joker einlesen + getchar(); // Leeren des Puffers + + if (toupper(jokerAntwort[0]) == 'Y' && kategorie->joker > 0) { + printf("Joker inserted! Two incorrect answer options were deleted.\n"); + + char korrekteAntwort = kategorie->fragen[i].korrekteAntwort; + int gestrichen = 0; + + for (char option = 'A'; option <= 'D'; option++) { + if (option != korrekteAntwort && gestrichen < 2) { + switch (option) { + case 'A': + strcpy(kategorie->fragen[i].antwortA, "XXXXXX"); + gestrichen++; + break; + case 'B': + strcpy(kategorie->fragen[i].antwortB, "XXXXXX"); + gestrichen++; + break; + case 'C': + strcpy(kategorie->fragen[i].antwortC, "XXXXXX"); + gestrichen++; + break; + case 'D': + strcpy(kategorie->fragen[i].antwortD, "XXXXXX"); + gestrichen++; + break; } - - // Zeigt die Antworten erneut an - printf("\nA) %s\nB) %s\nC) %s\nD) %s\n", kategorie->fragen[i].antwortA, kategorie->fragen[i].antwortB, kategorie->fragen[i].antwortC, kategorie->fragen[i].antwortD); - - break; - } - else { - printf("No Joker left. Choose a different Category.\n"); - } - } - else if (toupper(jokerAntwort[0]) == 'N') { - break; // Beendet die Schleife, wenn der Spieler keinen Joker verwenden möchte - } - else { - printf("Invalid input. Please type in 'Y'' for yes or 'N' for no.\n"); } + + // Zeigt die Antworten erneut an + printf("\nA) %s\nB) %s\nC) %s\nD) %s\n", kategorie->fragen[i].antwortA, kategorie->fragen[i].antwortB, kategorie->fragen[i].antwortC, kategorie->fragen[i].antwortD); + + kategorie->joker--; // Verringere die Anzahl der Joker + jokerVerwendet = 1; // Setze das Joker-Flag } - else { - break; // Wenn der Joker bereits verwendet wurde, beendet die Schleife ohne nachzufragen - } + } + // Überprüfe die Antwort des Benutzers, wenn der Joker nicht verwendet wurde + if (!jokerVerwendet) { printf("Enter your choice (A/B/C/D): "); - scanf("%9s", benutzerAntwort); + scanf("%1s", benutzerAntwort); // Benutzereingabe einlesen + getchar(); // Leeren des Puffers benutzerAntwort[0] = toupper(benutzerAntwort[0]); - getchar(); if (pruefeAntwort(kategorie->fragen[i], benutzerAntwort[0])) { printf("Correct!\n"); @@ -106,9 +89,12 @@ int spieleKategorie(Kategorie* kategorie) { else { printf("Wrong! The correct Answer is %c\n", kategorie->fragen[i].korrekteAntwort); } + } - } while (0); + // Setze das Joker-Flag für die nächste Frage zurück + jokerVerwendet = 0; } + return punktzahl; }