Int c= 10; rand() %c ne fonctionne pas

Fermé
Utilisateur anonyme - 15 déc. 2008 à 23:11
 Utilisateur anonyme - 16 déc. 2008 à 01:02
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 !
A voir également:

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
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
0
Utilisateur anonyme
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
0
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.
0
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
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.
0
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
exact, je n'avais pas fait attention.
0
Utilisateur anonyme
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........
0
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
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.
#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;
}

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
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 !
0