Générer un nombre aléatoire sur un intervalle défini en C

Je connais bien python et il est si simple de créer un nombre aléatoire sur un intervalle défini, mais en C, il semble un peu plus compliqué. Voici donc ce que j’ai en regardant d’autres questions sur le dépassement de capacité de la stack.

int diceroll_1; diceroll_1=(rand()%3)+1; printf("%d\n",diceroll_1); 

Le problème est que cela me donne 3 à chaque fois. Je veux qu’il soit différent chaque fois que le programme est compilé et exécuté. Je veux que ce soit de 1 à 3 aléatoire. D’après ce que je comprends, cela pourrait le sauver et c’est pourquoi il en génère 3 à chaque fois et non pas ce que je veux. Comment générer un nombre aléatoire à chaque fois et pas le même nombre?

Avez-vous semé le srand ? Si non, essayez comme ça:

 #include  #include  #include  int main(void) { srand(time(NULL)); // only once // roll the dice int diceroll_1; diceroll_1=(rand()%3)+1; printf("%d\n",diceroll_1); return 0; } 

Sortie:

 Georgioss-MacBook-Pro:~ gsamaras$ gcc -Wall main.c Georgioss-MacBook-Pro:~ gsamaras$ ./a.out 3 Georgioss-MacBook-Pro:~ gsamaras$ ./a.out 1 

PS:

rand() produit des nombres pseudo-aléatoires, comme notre prof. en IP a insisté! Il doit être semé, sinon il donnera les mêmes chiffres encore et encore, puisque de l’ arbitre nous avons cela:

Si aucune valeur de départ n’est fournie, la fonction rand () est automatiquement ensemencée avec la valeur 1.

La fonction rand fonctionne en prenant le nombre aléatoire précédent généré, en effectuant une permutation sur celui-ci, puis en le renvoyant. Si c’est la première fois que vous appelez rand , il prendra la valeur de la valeur de départ pour la séquence de génération de nombres aléatoires et le permutera.

N’oubliez pas que les ordinateurs sont fondamentalement des machines déterministes et que le “caractère aléatoire” n’existe pas vraiment au niveau des instructions matériel / CPU, à l’exception des périphériques nouveaux comme les TRNG .

Des langages de haut niveau tels que Python peuvent vous cacher cela et prendre soin de transférer automatiquement la génération de nombres aléatoires à l’heure système, en coulisse, mais C ne le fera pas. Vous devez appeler srand avec une valeur de départ avant d’appeler rand .

Maintenant, appelez srand avec des arguments comme srand(3); et srand(100); génèrent différents nombres aléatoires les uns des autres, ils seront la même séquence à chaque fois. Si vous voulez une valeur vraiment unique pour la graine, essayez d’utiliser l’heure système actuelle:

srand((unsigned)time(NULL));