Random Wort erstellen in C



  • Hey Community!
    Ich habe folgendes Problem bei einem Beispiel:
    Nämlich muss ich ein dreistelliges "Wort" per Zufall erstellen lassen.
    Erste Stelle ein Großbuchstabe, zweite Stelle ein Kleinbuchstabe und an dritter Stelle eine Zahl sein.
    Dabei muss ich noch loBound und upBound für alle drei Stellen vorgeben. Ich habe alles eig gelöst bis auch die Großbuchstaben. Da bin ich etwas am zweifeln und habe auch ein paar andere Möglichkeiten probiert, ohne Erfolg.

    #include <stdio.h>
    #include <time.h>
    #include <stdlib.h>
    
    int main()
    {
        char upBound1, loBound1, upBound2, loBound2;
        int upBound3, loBound3, zz, gz, kz;
    
        srand(time(NULL));
    
        printf("Unterschranke fuer den Grossbuchstaben: ");
        scanf("%s", &loBound1);
        printf("Oberschranke fuer den Grossbuchstaben: ");
        scanf("%s", &upBound1);
    
        printf("\nUnterschranke fuer den Kleinbuchstaben: ");
        scanf("%s", &loBound2);
        printf("Oberschranke fuer den Kleinbuchstaben: ");
        scanf("%s", &upBound2);
    
        printf("\nUnterschranke fuer die Ziffer: ");
        scanf("%d", &loBound3);
        printf("Oberschranke fuer die Ziffer: ");
        scanf("%d", &upBound3);
    
        int range1 = (int) upBound1 - (int) loBound1 + 1;
        int range2 = (int) upBound2 - (int) loBound2 + 1;
        int range3 = upBound3 - loBound3 + 1;
    
        gz = rand() % range1 + loBound1;
        kz = rand() % range2 + loBound2;
        zz = rand() % range3 + loBound3;
    
        char neuGz = gz;
        char neuKz = kz;
    
        printf("\nZufallswort: %c%c%d", neuGz, neuKz, zz);
        return 0;
    }
    

    PS: Ich habe nix dagegen, wenn ihr auch den allg. Code ausbessern möchtet 😉

    Bin sehr dankbar für jede Antwort.
    Lg



  • @MrBrutDev Beim Formatspecifier %s von scanf wird noch ein '\0' angehängt.
    Wenn du 1 Zeichen einlesen willst, brauchst du Platz für 2 Zeichen.

    Benutze " %c" als Formatstring. Beachte das Leerzeichen vor dem % (Das überliest Whitestrings, zu denen auch das \n der Entertaste zählt.)



  • Danke erstmal für deine Antwort.

    Ich muss zugeben das ich das mit dem Leerzeichen vor dem %c nicht gewusst habe, deswegen habe ich auch eine "Stringe" benutzt. Jetzt geht auch alles.

    Danke nochmal,
    Lg



  • @MrBrutDev
    Das mit dem Leerzeichen kann man nur wissen, wenn einem das Problem bewußt ist und man mal die man-page der Formatspecifier für scanf aufmerksam durchliest.

    Auch in Lehrbüchern wird diese Lösung nicht (oder sehr selten) gezeigt.

    Das bei %s mehr Platz benötigt wird, sollte aber bekannt sein.


Log in to reply