A voir également:
- Int c= 10; rand() %c ne fonctionne pas
- Mon pc s'allume mais ne démarre pas windows 10 - Guide
- Clé windows 10 gratuit - Guide
- Windows 10 gratuit - Accueil - Mise à jour
- Winrar 64 bits windows 10 - Télécharger - Compression & Décompression
- Logiciel montage vidéo gratuit windows 10 - Guide
5 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
15 déc. 2008 à 23:55
15 déc. 2008 à 23:55
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
Utilisateur anonyme
16 déc. 2008 à 00:06
16 déc. 2008 à 00:06
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.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
16 déc. 2008 à 00:24
16 déc. 2008 à 00:24
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.
loupius
>
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
16 déc. 2008 à 00:37
16 déc. 2008 à 00:37
exact, je n'avais pas fait attention.
Utilisateur anonyme
16 déc. 2008 à 00:21
16 déc. 2008 à 00:21
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........
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
16 déc. 2008 à 00:27
16 déc. 2008 à 00:27
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
Utilisateur anonyme
16 déc. 2008 à 01:02
16 déc. 2008 à 01:02
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 !