diff --git a/.vs/ProjectSettings.json b/.vs/ProjectSettings.json new file mode 100644 index 0000000..d33b3d6 --- /dev/null +++ b/.vs/ProjectSettings.json @@ -0,0 +1,3 @@ +{ + "CurrentProjectSetting": "Keine Konfigurationen" +} \ No newline at end of file diff --git a/.vs/VSWorkspaceState.json b/.vs/VSWorkspaceState.json new file mode 100644 index 0000000..76edb6a --- /dev/null +++ b/.vs/VSWorkspaceState.json @@ -0,0 +1,9 @@ +{ + "ExpandedNodes": [ + "", + "\\src", + "\\test" + ], + "SelectedNode": "\\src\\programm.c", + "PreviewInSolutionExplorer": false +} \ No newline at end of file diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite new file mode 100644 index 0000000..01a2352 Binary files /dev/null and b/.vs/slnx.sqlite differ diff --git a/.vs/the-quizstars/FileContentIndex/33fa03de-94f3-46ff-852c-82c39dd3438f.vsidx b/.vs/the-quizstars/FileContentIndex/33fa03de-94f3-46ff-852c-82c39dd3438f.vsidx new file mode 100644 index 0000000..a887f78 Binary files /dev/null and b/.vs/the-quizstars/FileContentIndex/33fa03de-94f3-46ff-852c-82c39dd3438f.vsidx differ diff --git a/.vs/the-quizstars/FileContentIndex/5870cdaa-2fcd-43ca-9d0c-415d34f163d7.vsidx b/.vs/the-quizstars/FileContentIndex/5870cdaa-2fcd-43ca-9d0c-415d34f163d7.vsidx new file mode 100644 index 0000000..dfa304f Binary files /dev/null and b/.vs/the-quizstars/FileContentIndex/5870cdaa-2fcd-43ca-9d0c-415d34f163d7.vsidx differ diff --git a/.vs/the-quizstars/FileContentIndex/6d95f6dc-d0ee-4d82-8089-e7fcd9e3c6c6.vsidx b/.vs/the-quizstars/FileContentIndex/6d95f6dc-d0ee-4d82-8089-e7fcd9e3c6c6.vsidx new file mode 100644 index 0000000..c09e180 Binary files /dev/null and b/.vs/the-quizstars/FileContentIndex/6d95f6dc-d0ee-4d82-8089-e7fcd9e3c6c6.vsidx differ diff --git a/.vs/the-quizstars/FileContentIndex/cb8a11d3-0de6-4a0a-a76d-3d108b17b5a6.vsidx b/.vs/the-quizstars/FileContentIndex/cb8a11d3-0de6-4a0a-a76d-3d108b17b5a6.vsidx new file mode 100644 index 0000000..85ab062 Binary files /dev/null and b/.vs/the-quizstars/FileContentIndex/cb8a11d3-0de6-4a0a-a76d-3d108b17b5a6.vsidx differ diff --git a/.vs/the-quizstars/FileContentIndex/e41759ff-8eed-41d5-9715-5ec97083d7c5.vsidx b/.vs/the-quizstars/FileContentIndex/e41759ff-8eed-41d5-9715-5ec97083d7c5.vsidx new file mode 100644 index 0000000..0f8a15f Binary files /dev/null and b/.vs/the-quizstars/FileContentIndex/e41759ff-8eed-41d5-9715-5ec97083d7c5.vsidx differ diff --git a/.vs/the-quizstars/v17/.wsuo b/.vs/the-quizstars/v17/.wsuo new file mode 100644 index 0000000..6362a94 Binary files /dev/null and b/.vs/the-quizstars/v17/.wsuo differ diff --git a/.vs/the-quizstars/v17/Browse.VC.db b/.vs/the-quizstars/v17/Browse.VC.db new file mode 100644 index 0000000..b8d49fe Binary files /dev/null and b/.vs/the-quizstars/v17/Browse.VC.db differ diff --git a/.vs/the-quizstars/v17/ipch/AutoPCH/258c13f24566c26a/PROGRAMM.ipch b/.vs/the-quizstars/v17/ipch/AutoPCH/258c13f24566c26a/PROGRAMM.ipch new file mode 100644 index 0000000..bba1788 Binary files /dev/null and b/.vs/the-quizstars/v17/ipch/AutoPCH/258c13f24566c26a/PROGRAMM.ipch differ diff --git a/.vs/the-quizstars/v17/ipch/AutoPCH/4ce352b5f58c5a60/QUIZDUELL.ipch b/.vs/the-quizstars/v17/ipch/AutoPCH/4ce352b5f58c5a60/QUIZDUELL.ipch new file mode 100644 index 0000000..e2dff2c Binary files /dev/null and b/.vs/the-quizstars/v17/ipch/AutoPCH/4ce352b5f58c5a60/QUIZDUELL.ipch differ diff --git a/src/quizduell.c b/src/quizduell.c index 752db04..18dd9a6 100644 --- a/src/quizduell.c +++ b/src/quizduell.c @@ -4,13 +4,13 @@ #include #include -int pruefeAntwort(QuizFrage frage, char antwort) { +int pruefeAntwort(const QuizFrage frage, const char antwort) { return (frage.korrekteAntwort == antwort); } QuizFrage erstelleFrage(const char* frage, const char* antwortA, const char* antwortB, const char* antwortC, const char* antwortD, char korrekteAntwort) { QuizFrage neueFrage; - strcpy(neueFrage.frage, frage); + snprintf(neueFrage.frage, sizeof(neueFrage.frage), "%s", frage); strcpy(neueFrage.antwortA, antwortA); strcpy(neueFrage.antwortB, antwortB); strcpy(neueFrage.antwortC, antwortC); @@ -21,82 +21,66 @@ QuizFrage erstelleFrage(const char* frage, const char* antwortA, const char* ant } int spieleKategorie(Kategorie* kategorie) { - int punktzahl = 0; - int jokerVerwendet = 0; + size_t punktzahl = 0; + int jokerVerwendet = 0; // Joker-Flag für diese Kategorie for (int i = 0; i < kategorie->anzahlFragen; i++) { - char benutzerAntwort[10]; + 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"); - } - } - else { - break; // Wenn der Joker bereits verwendet wurde, beendet die Schleife ohne nachzufragen + + // 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 } + } - printf("Your answer: "); - scanf("%s", benutzerAntwort); + // Überprüfe die Antwort des Benutzers, wenn der Joker nicht verwendet wurde + if (!jokerVerwendet) { + printf("Enter your choice (A/B/C/D): "); + 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"); @@ -105,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; } @@ -130,6 +117,9 @@ void quizduell() { Kategorie kategorien[MAX_CATEGORIES]; kategorien[0].fragen = (QuizFrage*)malloc(MAX_QUESTIONS_PER_CATEGORY * sizeof(QuizFrage)); + if (kategorien[0].fragen == NULL) { + exit(EXIT_FAILURE); + } kategorien[0].fragen[0] = erstelleFrage("Whats the height of the Zugspitze?", "2482 Meter", "2867 Meter", "2962 Meter", "3173 Meter", 'C'); kategorien[0].fragen[1] = erstelleFrage("In which Federal State is the Zugspitze?", "Bayern", "Baden-Wuerttemberg", "Hessen", "Thueringen", 'A'); kategorien[0].fragen[2] = erstelleFrage("Which Mountain is the highest following after the Zugspitze?", "Grossglockner", "Watzmann", "Feldberg", "Meissner", 'B'); @@ -137,6 +127,9 @@ void quizduell() { kategorien[0].joker = 1; kategorien[1].fragen = (QuizFrage*)malloc(MAX_QUESTIONS_PER_CATEGORY * sizeof(QuizFrage)); + if (kategorien[1].fragen == NULL) { + exit(EXIT_FAILURE); + } kategorien[1].fragen[0] = erstelleFrage("Which Ingredient is used traditionally for Pesto?", "Tomatoes", "Basil", "Spinach", "Oregano", 'B'); kategorien[1].fragen[1] = erstelleFrage("Which meal is known for its usage of rice?", "Lasagna", "Sushi", "Pizza", "Hamburger", 'B'); kategorien[1].fragen[2] = erstelleFrage("Which color has a ripe banana?", "Red", "Green", "Yellow", "Orange", 'C'); @@ -144,6 +137,9 @@ void quizduell() { kategorien[1].joker = 1; kategorien[2].fragen = (QuizFrage*)malloc(MAX_QUESTIONS_PER_CATEGORY * sizeof(QuizFrage)); + if (kategorien[2].fragen == NULL) { + exit(EXIT_FAILURE); + } kategorien[2].fragen[0] = erstelleFrage("In which sport is the term 'home run' used?", "Soccer/Football", "Baseball", "Tennis", "Golf", 'B'); kategorien[2].fragen[1] = erstelleFrage("How many players are there normally on the pitch in a soccer/football team?", "9", "11", "7", "5", 'B'); kategorien[2].fragen[2] = erstelleFrage("What sport is played on a pitch and has a 'wicket'?", "Rugby", "Cricket", "American Football", "Hockey", 'B'); @@ -156,9 +152,11 @@ void quizduell() { zeigeVerfuegbareKategorien(kategorien); printf("Your selection: "); - scanf("%s", auswahl); + fgets(auswahl, sizeof(auswahl), stdin); + auswahl[strcspn(auswahl, "\n")] = '\0'; - int auswahlIndex = -1; + typedef int CategoryIndex; + CategoryIndex auswahlIndex = -1; for (int i = 0; i < MAX_CATEGORIES; i++) { if (kategorien[i].fragen != NULL && strcmp(auswahl, "Mountains") == 0) {