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 tollrand() % 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