générer des caractères aléatoires en c

Je suis novice en programmation en C et on m’a confié la tâche de créer un tableau 2D qui stocke des lettres aléatoires de AZ en utilisant la fonction random () Je sais faire des nombres aléatoires.

nextvalue = random ( ) % 10001; 

mais je ne sais pas exactement comment créer un caractère aléatoire. Je sais que vous pouvez utiliser ASCII pour créer un caractère aléatoire en utilisant la plage 65 – 90 du tableau ASCII. Quelqu’un peut-il m’aider à trouver une solution? Je l’apprécierais beaucoup.

Vous devriez supposer quelque chose à propos du codage des caractères de votre système. Supposons qu’il s’agisse d’ ASCII ou de UTF-8 et limitons-nous aux 26 lettres majuscules ABC … XYZ de l’alphabet latin.

Ensuite, vous pouvez coder:

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

Cela ne fonctionnera pas sur EBCDIC . Tu pourrais aussi essayer

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

qui fonctionnerait avec n’importe quel encodage (y compris EBCDIC , ASCII , UTF-8 , ISO-Latin-1 ) …. où chaque lettre A … Z est encodée par un seul caractère.

Mais c’est une réponse intéressante qui explique pourquoi random() % 26 est erroné. De mon sharepoint vue naïf non-expert, c’est assez bon.

Remplacement de random() % 26 par myrandomlt26() là où nous avons défini

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

devrait être un peu mieux (très souvent, la boucle do … while ci-dessus doit être exécutée une fois).

Cependant, vous en apprendrez davantage sur l’ Unicode , par exemple, vous découvrirez qu’il existe des langages humains dans lesquels la notion même de lettre (ou de majuscule) n’est pas aussi sortingviale que vous ne le pensez.

Je ne suis pas un expert en la matière, mais la légende urbaine dit étrangement que le français œ n’est pas une lettre (mais une simple ligature) parce que le représentant français lors d’une réunion de l’ISO était malade lorsqu’il a été discuté. À l’école française, je me souviens d’avoir appris (probablement en 1966-1972) que ce n’était pas une lettre (mais pas l’écriture manuscrite de la ligature – qui porte un nom spécial “E dans l’O” en français – était une faute d’orthographe) , mais certaines personnes croient le contraire. Les lettres accentuées comme é ou à sont généralement considérées comme des lettres en français (mais leur codage UTF-8 prend plusieurs caractères consécutifs ….). De même, je crois et ai appris que le signe doux cyrillique ь n’est pas une lettre, même si elle en a l’air. Définir ce qu’est une lettre en arabe , hébreu , coréen , cherokee , thaï … devrait également être amusant et faire l’object de débats sans fin…

Je pense que vous avez déjà résolu ce problème. Vous avez juste besoin de penser plus fort et de bricoler davantage. En C, vous pouvez facilement afficher n’importe quel caractère ASCII sous forme déc. Voici la table ASCII pour référence. Par exemple

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

Donc, cela revient probablement à générer un nombre aléatoire compris entre 65 et 90. J’espère que cela vous aidera;) Suis également débutant en C avec quelques connaissances en C ++.