Random character in C

· knut's blog

 1#include <stdio.h>
 2#include <stdlib.h>
 3#include <time.h>
 4
 5char randomCharGenerator() {
 6    char result = rand() % 26 + 'a';
 7    /*
 8    rand    = erzeugt einen zufaelligen integer
 9    % 26    = rechnet den erzeugten zufaelligen Wert modulo 26 (Restwert berechnung)
10    + 'a'   = Buchstaben sind nur eine representation von Zahlen. Ascii (https://de.wikipedia.org/wiki/American_Standard_Code_for_Information_Interchange)
11            das keline a hat die Zahl 97 und der zufällige wert im bereich 0-25 wird um 97 erhöht. Bedeutet es sind Zahlen von 97 bis einschliesslich 122 möglich.
12            Das sind dann im ascii die Abbildungen: [a-z]
13            Statt 'a' als Charakter könnte man auch den Wert 97 einfuegen. Aber mit 'a' ist man ein bisschen unabhängiger was Zeichenkodierung angeht.
14    */
15    return result; //gibt den zufaelligen Wert zurueck
16    //Wahrscheinlich wird der Compiler diese extra Variable result weg optimieren oder sogar diese ganze Funktion, wenn die nicht an den verschiedensten stellen aufgerufen wird.
17    //Es ist ebenfalls möglich, diese Funktion als Makro in C zu schreiben.
18    //[https://www.c-howto.de/tutorial/praeprozessor/makros/](https://www.c-howto.de/tutorial/praeprozessor/makros/)
19}
20
21
22int main() {
23    srand(time(NULL)); //Nur einmalig Aufrufen am Anfang der main() Funktion
24    /*srand bedeutet seed random.
25    Da der Zufallsgenerator nur eine Mathematische Funktion ist, die aus einem gegebenen Wert, einen neuen erzeugt muss dieser gegebene Wert dem Random Komplex irgendwie zugewiesen werden. Das geschiet mit srand bzw. seed random.
26    Genauso wie die Seed's in Minecraft die mehr oder weniger immer die gleichen Welten generieren (Berg an gleicher position, Meer da wo es hingehört)
27
28
29
30*/
31    char myRandomString = randomCharGenerator();
32    printf("%c", myRandomString);
33}

Tausendmal einfacher als das hier:

 1#include <stdio.h>
 2#include <stdlib.h>
 3#include <time.h>
 4
 5char* letters =  "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
 6int length = 26 + 26;
 7
 8int main() {
 9    srand(time(NULL));
10    char myNewChar = letters[rand() % length];
11
12    printf("%c", myNewChar);
13}

Das geht, ist aber ekelig!

Naja