generar caracteres aleatorios en c

Soy nuevo en la progtwigción en C y se me ha asignado la tarea de crear una matriz 2D que almacene letras aleatorias de AZ usando la función random (). Sé cómo hacer números al azar.

nextvalue = random ( ) % 10001; 

pero no estoy seguro de cómo crear exactamente un carácter aleatorio. Sé que puede usar ASCII para crear un carácter aleatorio usando el rango 65 – 90 en la tabla ASCII. ¿Alguien puede ayudarme a encontrar una solución? Me sería de gran aprecio.

Debe asumir algo sobre la encoding de caracteres de su sistema. Supongamos que es ASCII o UTF-8 y nos limitemos a las 26 letras mayúsculas ABC … XYZ del alfabeto latino.

Entonces podrías codificar:

  char randomletter = 'A' + (random() % 26); 

Esto no funcionará en EBCDIC . También puedes probar

  char randomletter = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[random () % 26]; 

que funcionaría con cualquier encoding (incluyendo EBCDIC , ASCII , UTF-8 , ISO-Latin-1 ) …. donde cada letra A … Z está codificada por un solo char .

Pero esta es una respuesta interesante que explica por qué random() % 26 está equivocado. En mi ingenuo punto de vista no experto, es lo suficientemente bueno.

Reemplazo de random() % 26 por myrandomlt26() donde hemos definido

 static inline unsigned myrandomlt26() { long l; do { l = random(); } while (l>=(RAND_MAX/26)*26); return (unsigned)(l % 26); } 

debería ser un poco mejor (muy a menudo el dowhile bucle anterior debería ejecutarse una vez).

Sin embargo, si aprende más, por ejemplo, sobre Unicode , descubrirá que hay algunos lenguajes humanos en los que la noción de letra (en mayúsculas) no es tan trivial como cree.

No soy un experto en estos asuntos, pero la leyenda urbana dice que extrañamente el francés œ no es una letra (sino solo una ligadura) porque el representante francés en alguna reunión de la ISO estaba enfermo cuando se discutió. En la escuela de francés, recuerdo haber aprendido (probablemente en 1966-1972) que no es una letra (pero no escribir a mano la ligadura, que tiene un nombre especial “E dans l’O” en francés, fue un error de ortografía) , pero algunas personas creen lo contrario. Por lo general, las letras con acento como é o à se consideran letras en francés (pero su encoding UTF-8 tiene varios caracteres consecutivos …). Del mismo modo, creo y he aprendido que el signo suave cirílico ь no es una letra, incluso si se parece a ella. Definir qué es una letra en árabe , hebreo , coreano , cherokee , tailandés … también debería ser divertido y una cuestión de interminables debates …

Creo que ya has resuelto este problema. Solo necesitas pensar más duro y jugar más con eso. En C puede mostrar fácilmente cualquier carácter ASCII en forma de diciembre. Aquí está la tabla ASCII para referencia. Por ejemplo

 char c = 65; char c = 'A'; // Both are the same thing. 

Entonces, probablemente sea lo mismo que generar un número aleatorio entre 65 y 90. Espero que esto ayude;) También soy nuevo en C con algunos antecedentes en C ++.