Hi,
ich habe folgendes kleine C Programm:
Alles anzeigen
Wenn ich das Programm ausführe und etwas eingebe, das ungleich "y" oder "n" ist, dann macht das Programm das:
Warum? Ich bin schon mit dem Debugger durchgesteppt, konnte den Fehler aber nicht ausfindig machen. Ich verstehe nicht, warum fgets einfach einmal übergangen wird.
Weiß jemand Rat?
ich habe folgendes kleine C Programm:
C-Quellcode
- #include <stdio.h>
- #include <strings.h>
- //Fakultätsfunktionsdeklaration
- int factorial(int i) {
- //Fakult√§t initialisieren
- int factorial = 1;
- //Nur berechnen wenn index gr√sser als 1, da !1 = 1 und !0 = 1
- while (i > 1) {
- //Fakultät erhöhren und index um eins verringern
- factorial *= i--;
- }
- return factorial;
- }
- int main(void) {
- char choice;
- char input[2] = {0};
- printf("Dieses Programm berechnet die Fakultäten von 1 bis 10 und gibt sie aus.\n");
- do {
- printf("Wollen Sie fortfahren? (y/n)\n");
- //Benutzereingabe einlesen
- fgets(input, sizeof(input), stdin);
- sscanf(input, "%c", &choice);
- //Der Nutzer möchste fortfahren
- if (choice == 'y') {
- //Array of factorials
- int factorials[10];
- //Anzahl der Einträge dynamisch berechnen
- int numberOfElements = sizeof(factorials) / sizeof(factorials[0]);
- //Array durchlaufen
- for (int i = 0; i < numberOfElements; i++) {
- //Fakultät berechnen und entsprechendem Feld zuweisen
- factorials[i] = factorial((i + 1));
- }
- //Einträge durchlaufen
- for (int i = 0; i < numberOfElements; i++) {
- //Index is the Zahl und das Element des Array the Fakultät zu der Zahl
- printf("Die Fakultät der Zahl %d ist %d\n", (i + 1), factorials[i]);
- }
- } else if (choice != 'y' && choice != 'n') {
- printf("Bitte tätigen Sie eine gültige Eingabe.\n");
- choice = '\0';
- memset(input, 0, sizeof(input));
- }
- } while (choice != 'y' && choice != 'n');
- printf("Das Programm wird beendet. Auf Wiedersehen!\n");
- return 0;
- }
Wenn ich das Programm ausführe und etwas eingebe, das ungleich "y" oder "n" ist, dann macht das Programm das:
Warum? Ich bin schon mit dem Debugger durchgesteppt, konnte den Fehler aber nicht ausfindig machen. Ich verstehe nicht, warum fgets einfach einmal übergangen wird.
Weiß jemand Rat?


Dann lag es einfach an der Dimensionierung von input