Zufallsbuchstabe in C



  • Hallo,

    wenn es nicht auf den perfekten Zufall ankommt, hilft vieleicht diese schnelle Lösung:

    char c = rand() % 25 + 65;
    printf( "%c\n", c );
    

    mfg Martin



  • Ich glaube, %26 war gemeint.



  • Hallo,

    vielen dank für Eure Hilfe! Funktioniert jetzt so wie ich es mir vorgestellt habe.



  • Du hast das ja schon passend, das du nicht immer den gleichen "Zufall" hast?

    Tip für nicht so geübte: Programme mit Zufallszahlen immer mehrfach testen.



  • f.-th. schrieb:

    Du hast das ja schon passend, das du nicht immer den gleichen "Zufall" hast?

    Was will mir dieser Satz sagen? 😕



  • Es würde im übrigen die Lesbarkeit erhöhen wenn man nicht mit 65 um sich wirft sondern das konsequentere 'A' bevorzugen würde.
    Ansonsten ist es vielleicht auf den ersten Blick toll rand() % 25 + 'A' zu schreiben, aber imho geschickter ist es sich ein eigenes Alphabet zu definieren, z.B.:

    char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    ...
    foo = alphabet[rand() % sizeof alphabet];
    

    Hat halt den Vorteil, dass man nicht rumfrickeln muss sobald man mal ein Alphabet aus nicht-nur Großbuchstaben hat. Ist auch portabel (auch wenn das in dem Fall nicht wirklich relevant ist).



  • Tim schrieb:

    rand() % 25 + 'A'

    oder sogar
    rand()%('Z'-'A') + 'A'
    oder falls einen die 25 doch noch stört
    rand()%('Z'-'A'+1) + 'A'



  • touché



  • Nebenbei: der schöne Ausdruck von volkard ist nur gültig, weil C garantiert, dass die Buchstaben aufsteigend ihren Zahlenwerten zugeordnet sind. Dass 'A' bei 65 liegt, ist aber nicht garantiert. Tims Ansatz ist allgemeiner, und eine Spur schneller, weil die Addition wegfällt; der Geschwindigkeitsgewinn sollte aber selten spürbar sein.

    janisch_htl schrieb:

    Sollte dies irgendwie zu bewerkstelligen sein stellt sich ja die Frage, wie ich dem Computer sagen soll das A=65, B=66 usw ist. Switch-Case ist da ja ziehmlich umständlich.

    Falls dir das nicht ohnehin schon klar geworden ist: zwischen Zahlen und Buchstaben macht C keinen Unterschied. Die Buchstaben sind Zahlen:

    int i = 'A';   /* i hat den Zahlenwert von A (65 bei ASCII) */
    char c = 65;   /* c hat den Buchstaben zu 65 ('A' bei ASCII) */
    putchar(i + 25)   /* gibt 'Z' aus */
    putchar(c + 25)   /* gibt auch 'Z' aus */
    

    🙂



  • volkard schrieb:

    Ich glaube, %26 war gemeint.

    Korrekt. 🙄

    mfg Martin


Anmelden zum Antworten