Buchstaben-Raten ok so, oder verbesserungswürdig?



  • Hi Leute,
    ich habe mal ein kleines Buchstaben-Raten programmiert und wollte mal
    wissen was man noch so verbessern könnte bzw. was schlecht programmiert ist?

    #include <stdio.h>
    #include <stdlib.h>
    
    /*
    Mein kleines Buchstaben-Raten!
    */
    
    char new_char(void){
        int x = getchar();
        fflush(stdin);
        return x;
    }
    
    int gen_number(int max){
       return 1+rand()%max;
    }
    
    int main(void){
    
        srand(time(NULL));
    
        char alphabet[26] = "abcdefghijklmnopqrstuvwxyz";
        char randomChar, userChar;
        int totalTrials, remainingTrials;
    
        totalTrials = 5;
        remainingTrials = totalTrials;
        randomChar = alphabet[gen_number(26)];
    
        printf("********************************\n");
        printf("Willkommen zum Buchstaben-Raten!\n");
        printf("********************************\n\n");
    
        while (remainingTrials > 0){
    
            printf("Bitte Buchstaben eingeben:");
            userChar = new_char();
            if (userChar == randomChar){
                remainingTrials--;
                break;
            }
            else{
                remainingTrials--;
            }
        }
    
        if (remainingTrials > 0){
    
            printf("Der Buchstabe war %c. Sie haben %i Versuche gebraucht.",
            randomChar,totalTrials-remainingTrials);
            getchar();
        }
        else {
            printf("Sie haben verloren. Sie konnten trotz %i Versuchen den Buchstaben %c nicht raten.",
            totalTrials,randomChar);
            getchar();
        }
        return 0;
    }
    

    MfG ::john::



  • Zeile 8: new_char sollte get_char heißen, da es einen char holt und nicht neu kreiert.
    Außerdem ist das eine char-Funktion die ein int zurückgibt, da sollte schon der Compiler eine Warnung ausgeben.

    Zeile 22: "abcdefghijklmnopqrstuvwxyz" hat 27 Zeichen und nicht 26, du hast das '\0'-Zeichen vergessen. Benutze einfach
    char alphabet[] = "abcdefghijklmnopqrstuvwxyz";, dann kann sowas nicht passieren.
    Meiner Meinung nach darf in Arrayklammern niemals eine Zahl stehen, aber da steh ich wohl alleine mit.

    Zeile 24-26 lassen sich zu
    int totalTrials = 5, remainingTrials = totalTrials;
    zusammenfassen.
    totalTrials sollte const sein, dann lässt es sich aber nicht mehr so schön zusammenfassen.

    Zeile 38-44 lassen sich zu
    if (userChar==randomChar) break;
    remainingTrials--;
    zusammenfassen.

    Zeile 47-57: Es steht in beiden Zweigen getchar();, daher kann man es auch rausnehmen und vor das return 0 schreiben.
    Ich hab keine Ahnung was das getchar() eigentlich tut.

    Den Zufallsbuchstaben kannst du auch direkt mit
    char randomChar = rand()%26+'\a';
    generieren und dir gen_number und alphabet komplett sparen.

    Zeile 49 und 54 sollten hinten ein '\n' printen.

    Mehr finde ich gerade nicht.
    Wie wunderbar kritisch man doch mit fremden Code ist 😉
    Musste mich davon ablenken dass mein eigener Code gerade nicht funzt -.-


Log in to reply