Int c= 10; rand() %c ne fonctionne pas
Utilisateur anonyme
-
Utilisateur anonyme -
Utilisateur anonyme -
Salut tout le monde ^^
Bon voila j'ai un ptit problème:
il me faut pouvoir donner un nombre aléatoire, en respectant la limite maximale donnée par l'utilisateur.
Je fais donc :
printf("Limite maximale ? \n");
int c;
scanf("%d",&c);
srand(time(NULL));
int a=rand()%c;
Et bien evidemment ça marche pas ^^
Windows me dit carrément que "mon_programme.exe a cessé de fonctionner" XD
Et si je fais :
int a=rand()%'c';
J'ai l'impression qu'en fait il prend en compte le code ascii de la lettre c.....
Et si j'utilise des guillemets, hé ben j'ai une jolie erreur à la compilation !
Donc voila, je cherche un moyen pour parvenir a utiliser cette façon de faire........rand() ne fonctionne-t-il qu'avec la valeur maximale en chiffres et non pas stocké dans une variable ?
J'ai vu d'autres façons de générer des nombres aléatoires en cherchant sur le Web, mais j'aime bien celle-ci ^^
Seulement si ça ne permet pas d'utiliser des variables, je me rabattrais sur autre chose.....
Donc voila, merci de m'aider à résoudre ce problème ;-) je vous en serait très reconnaissant !
Bon voila j'ai un ptit problème:
il me faut pouvoir donner un nombre aléatoire, en respectant la limite maximale donnée par l'utilisateur.
Je fais donc :
printf("Limite maximale ? \n");
int c;
scanf("%d",&c);
srand(time(NULL));
int a=rand()%c;
Et bien evidemment ça marche pas ^^
Windows me dit carrément que "mon_programme.exe a cessé de fonctionner" XD
Et si je fais :
int a=rand()%'c';
J'ai l'impression qu'en fait il prend en compte le code ascii de la lettre c.....
Et si j'utilise des guillemets, hé ben j'ai une jolie erreur à la compilation !
Donc voila, je cherche un moyen pour parvenir a utiliser cette façon de faire........rand() ne fonctionne-t-il qu'avec la valeur maximale en chiffres et non pas stocké dans une variable ?
J'ai vu d'autres façons de générer des nombres aléatoires en cherchant sur le Web, mais j'aime bien celle-ci ^^
Seulement si ça ne permet pas d'utiliser des variables, je me rabattrais sur autre chose.....
Donc voila, merci de m'aider à résoudre ce problème ;-) je vous en serait très reconnaissant !
A voir également:
- Int c= 10; rand() %c ne fonctionne pas
- Windows 10 ne démarre pas - Guide
- Clé d'activation windows 10 - Guide
- Restauration systeme windows 10 - Guide
- Logiciel montage vidéo gratuit windows 10 - Guide
- Pilote son windows 10 - Télécharger - Pilotes & Matériel
5 réponses
Salut,
Oui c'est normal sur windows, lorsque tu ne lances pas le programme à partir du terminal, le programme se ferme à la fin.
Une astuce consiste à mettre getchar(); juste avant le return 0; final.
De plus il vaut mieux utiliser la division que le modulo avec rand() sinon cela peut conduire à des statistiques biaisées.
Cdlt
Oui c'est normal sur windows, lorsque tu ne lances pas le programme à partir du terminal, le programme se ferme à la fin.
Une astuce consiste à mettre getchar(); juste avant le return 0; final.
De plus il vaut mieux utiliser la division que le modulo avec rand() sinon cela peut conduire à des statistiques biaisées.
Cdlt
Euh au fait désolé j'ai "légèrement" oublié d'écrire le printf à la fin :
printf("Limite maximale ? \n");
int c;
scanf("%d",&c);
srand(time(NULL));
int a=rand()%c;
printf("%d",a);
Et c'est donc le printf final qui pose problème, il ne veut pas m'afficher de valeur aléatoire avec c comme limite maximale (cf les explications du premier post).
En tout cas merci de répondre ^^
Pour le coup des stats biaisées, c'est pas très important pour le ptit truc que je fais mais merci ;-)
Par contre pour getchar, je ne comprends pas trop : quel est l'effet si on le met comme tu dis a la fin du main ?
Désolé d'être aussi débile lol
printf("Limite maximale ? \n");
int c;
scanf("%d",&c);
srand(time(NULL));
int a=rand()%c;
printf("%d",a);
Et c'est donc le printf final qui pose problème, il ne veut pas m'afficher de valeur aléatoire avec c comme limite maximale (cf les explications du premier post).
En tout cas merci de répondre ^^
Pour le coup des stats biaisées, c'est pas très important pour le ptit truc que je fais mais merci ;-)
Par contre pour getchar, je ne comprends pas trop : quel est l'effet si on le met comme tu dis a la fin du main ?
Désolé d'être aussi débile lol
int a=rand()%c;
Je pense que le compilateur doit râler devant une telle ligne.
Le prototype est : int rand (void); cette fonction renvoie donc un nombre aléatoire compris entre 0 et RAND_MAX (qui est défini dans 'stdlib.h' chez moi: #define RAND_MAX 2147483647).
D'autre part, il est certain que %c représente le code ascii d'un caractère.
Je pense que le compilateur doit râler devant une telle ligne.
Le prototype est : int rand (void); cette fonction renvoie donc un nombre aléatoire compris entre 0 et RAND_MAX (qui est défini dans 'stdlib.h' chez moi: #define RAND_MAX 2147483647).
D'autre part, il est certain que %c représente le code ascii d'un caractère.
D'autre part, il est certain que %c représente le code ascii d'un caractère./ital>
Ouh là, tu confonds avec les flags utilisés dans les chaînes de formatage comme dans printf.
Ici <ital>int a=rand()%c; correspond au modulo c. Donc rien à voir avec le code ascii d'un caractère comme utilisé dans un printf.
Ouh là, tu confonds avec les flags utilisés dans les chaînes de formatage comme dans printf.
Ici <ital>int a=rand()%c; correspond au modulo c. Donc rien à voir avec le code ascii d'un caractère comme utilisé dans un printf.
ok je comprends, enfin je crois ^^
Mais alors comment faire pour arriver a générer un nombre aléatoire dont la limite maximale est stockée dans une variable ?
Est- ce possible avec l'écriture int a=rand() ?
Parce que je ne vois pas comment faire sinon........
Mais alors comment faire pour arriver a générer un nombre aléatoire dont la limite maximale est stockée dans une variable ?
Est- ce possible avec l'écriture int a=rand() ?
Parce que je ne vois pas comment faire sinon........
Oublie le coup de la chaîne de caractères. Rien à voir dans ce contexte.
ton int a=rand()%c est parfaitement correct.
Le coup du getchar() est d'attendre que l'utilisateur tape sur un caractère avant que le programme prenne fin. Car lorsque le programme n'est pas lancé en commande, la fenêtre se fermera à la fin du programme. D'où ton message, qui n'est pas un message d'erreur ;)
Teste le code suivant, (j'ai rajouté juste le getchar()), ça devrait marcher.
ton int a=rand()%c est parfaitement correct.
Le coup du getchar() est d'attendre que l'utilisateur tape sur un caractère avant que le programme prenne fin. Car lorsque le programme n'est pas lancé en commande, la fenêtre se fermera à la fin du programme. D'où ton message, qui n'est pas un message d'erreur ;)
Teste le code suivant, (j'ai rajouté juste le getchar()), ça devrait marcher.
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
int main(void){
int c;
int a;
srand(time(NULL));
scanf("%d",&c);
a=rand()%c;
printf("%d\n",a);
getchar();
return 0;
}
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Aaaaaaaaa non je crois que j'ai compris ce que tu veux dire, mais ce n'est pas ça ^^
Tu penses peut-etre qu'en fait (je suis sous dev-c++) le programme, après avoir exécuté les commandes et fonctions que je lui ai demandé, s'arrête tout de suite ! Ce qui est vrai d'ailleurs ^^ mais en fait ce n'est pas le problème, jme suis déja fait un ptit programme attente.h avec comme tu le préconise un getchar dedans......
Non en fait ce n'est pas ça mon problème, le truc c'est vraiment que windows m'affiche une fenêtre avec "monprogramme a cessé de fonctionner, Windows recherche une solution a ce problème".....
Bon mais finalement tout en écrivant ce message, je me suis aperçu d'une horriiiiible erreur j'ai honte, en relisant mon programme j'ai vu que j'vais fait un truc du genre
int a = rand()%a
et en plus j'avais deja défini "a" plus tot........
donc bref désolé de cette grosse bourde ^^ je vous ai dérangé pour rien la ;-p et en fait tout marche bien depuis que j'ai changé les variables......
Enfin merci quand même pour vos super explications ;-) on comprend tout de suite mieux !
Tu penses peut-etre qu'en fait (je suis sous dev-c++) le programme, après avoir exécuté les commandes et fonctions que je lui ai demandé, s'arrête tout de suite ! Ce qui est vrai d'ailleurs ^^ mais en fait ce n'est pas le problème, jme suis déja fait un ptit programme attente.h avec comme tu le préconise un getchar dedans......
Non en fait ce n'est pas ça mon problème, le truc c'est vraiment que windows m'affiche une fenêtre avec "monprogramme a cessé de fonctionner, Windows recherche une solution a ce problème".....
Bon mais finalement tout en écrivant ce message, je me suis aperçu d'une horriiiiible erreur j'ai honte, en relisant mon programme j'ai vu que j'vais fait un truc du genre
int a = rand()%a
et en plus j'avais deja défini "a" plus tot........
donc bref désolé de cette grosse bourde ^^ je vous ai dérangé pour rien la ;-p et en fait tout marche bien depuis que j'ai changé les variables......
Enfin merci quand même pour vos super explications ;-) on comprend tout de suite mieux !