Partage
  • Partager sur Facebook
  • Partager sur Twitter

Programmation du jeu « nombre mystère ».

Message d’erreur depuis les modifications pour choisir un niveau.

Sujet résolu
3 janvier 2014 à 10:10:37

Bonjour à tous et à toutes,

Je suis entrain d’apprendre à programmer en C avec la méthode de Mathéo21 et j’en suis arrivé au chapitre 8 où il nous demande de faire un jeu (le nombre mystère).

J’ai commencé à faire le programme, j’ai regardé sa correction et il marchait très bien.
Ensuite comme Mathéo21 nous le conseille, je me suis entraîné à rajouter des améliorations comme un compteur de coups et le choix des niveaux.
Donc j’ai commencé par faire un compteur, jusqu’ici tout marchaient bien.

C’est arrivé au choix des niveaux que cela s’est compliqué. J’ai tapé un code ou il y avait beaucoup d’erreur, ensuite je l’ai corrigé pour que plus rien ne s’affiche en rouge au debug mais malheureusement  après avoir lancé le programme, je vois s’afficher une console vide et un message de Windows (7 ) :

«  jeux.exe a cessé de fonctionner » (fermer le programme).

Donc voilà mon problème.

Merci d’avance pour vos réponses.

PS : Je débute donc soyez indulgents  svp.

voila mon programme : ( je ne savais pas comment faire pour faire une capture d'écran ) 

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

int main()

{

    int nombremystere = 0, nombreentre = 0;

    int compteur = 0, MAX = 0, niveau = 0;

    const int  MIN = 1;

    srand(time(NULL));

    nombremystere = (rand()%(MAX-MIN+1))+MIN;

    printf("Choisissez votre difficulté :\n"); // choix des niveaux

    printf("Lvl 1.Entre 1 et 50.\n");

    printf("Lvl 2.Entre 1 et 100.\n");

    printf("Lvl 3.Entre 1 et 1000.\n");

    scanf("%d",&niveau);

    switch(niveau)

    {

   case 1 :

    MAX=50;

    break ;

    case 2 :

    MAX=100;

    break;

    case 3 :

    MAX=1000;

    break;

    }

do

{

    printf("Trouvez le nombre mystere :\n");

    scanf("%d", &nombreentre);

    if(nombreentre<nombremystere)

    printf("C'est plus !\n");

    else if(nombreentre>nombremystere)

    printf("C'est moins !\n");

    else

    printf("****Vous avez gagnez !****"),printf(" Mais vous l'avez fait en %d coups !\n",compteur);

    compteur++; // nombre de coups

}    while (nombremystere!= nombreentre);

}

-
Edité par darkazeri1998 3 janvier 2014 à 10:11:32

  • Partager sur Facebook
  • Partager sur Twitter
3 janvier 2014 à 10:23:36

Salut, il faut que tu mettes "nombremystere = (rand()%(MAX-MIN+1))+MIN;" après le premier switch, et normalement ça devrait être bon^^

Je pense que le problème vient du fait que MAX vaut 0 au moment ou tu appelles RAND().

-
Edité par steph311 3 janvier 2014 à 10:24:30

  • Partager sur Facebook
  • Partager sur Twitter
3 janvier 2014 à 10:41:02

Merci beaucoup pour ta réponse car cela marche de nouveau mais est ce que tu peux juste m'expliquer pour quoi il faut le mettre après le switch et pas avant ??? 

Merci d'avance.

  • Partager sur Facebook
  • Partager sur Twitter
3 janvier 2014 à 10:48:43

parce que ton switch deternine MAX, 1-> MAX = 50, 2-> MAX = 100, 3-> MAX = 1000

avant ton switch tu ne sais pas quel sera le niveau choisi alors qu apres si.

  • Partager sur Facebook
  • Partager sur Twitter
3 janvier 2014 à 10:49:36

Re-bonjour,

Mais depuis les dernières modifications ( "nombremystere = (rand()%(MAX-MIN+1))+MIN;" après le premier switch ) ,.

Mon nombre mystère n'est plus que 0 :/ est ce que quelqu'un pourrait m'aider ???

  • Partager sur Facebook
  • Partager sur Twitter
3 janvier 2014 à 10:51:26

Ca vient du fait que ta variable MAX vaut 0, et que tu effectues une division par 0 (MAX-MIN+1 = 0-1+1 = 0).

Pour reproduire le bug, fait

    int temp = rand()%(0);

et tu auras le même comportement !

  • Partager sur Facebook
  • Partager sur Twitter
3 janvier 2014 à 10:53:01

darkazeri1998 a écrit:

Re-bonjour,

Mais depuis les dernières modifications ( "nombremystere = (rand()%(MAX-MIN+1))+MIN;" après le premier switch ) ,.

Mon nombre mystère n'est plus que 0 :/ est ce que quelqu'un pourrait m'aider ???


Je viens de tester le programme, j'ai bien un nombre correct (784 je crois)
  • Partager sur Facebook
  • Partager sur Twitter
3 janvier 2014 à 11:14:08

Steph311 merci de tes réponses mais je n'ai pas tout compris :/

Que dois je faire pour eviter que mon nombre mystere = 0 ???

Je remets le programme qui ne marche pas avec les modifications :

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

int main()

{

    int nombremystere = 0, nombreentre = 0;

    int compteur = 1, MAX = 0, niveau = 0;

    const int  MIN = 1;

    // generation de nombre aléatoire

    printf("Choisissez votre difficulte :\n\n"); // choix des niveaux

    printf("Lvl 1.Entre 1 et 50.\n\n");

    printf("Lvl 2.Entre 1 et 100.\n\n");

    printf("Lvl 3.Entre 1 et 1000.\n\n");

    scanf("%d",&niveau);

    switch(niveau)

    {

    srand(time(NULL));

    nombremystere = (rand()%(MAX-MIN+1))+MIN;

   case 1 :

    MAX=50;

    break ;

    case 2 :

    MAX=100;

    break;

    case 3 :

    MAX=1000;

    break;

    }

do

{

    printf("Trouvez le nombre mystere :\n");

    scanf("%d", &nombreentre);

    if(nombreentre<nombremystere)

    printf("C'est plus !\n");

    else if(nombreentre>nombremystere)

    printf("C'est moins !\n");

    else

    printf("****Vous avez gagnez !****"),printf(" Mais vous l'avez fait en %d coups !\n",compteur);

    compteur++; // nombre de coups

}    while (nombremystere!= nombreentre);

}

  • Partager sur Facebook
  • Partager sur Twitter
3 janvier 2014 à 11:20:18

Re, quand je te disais après le switch, c'est après l'accolade fermante du switch!

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

int main()

{

    int nombremystere = 0, nombreentre = 0;

    int compteur = 0, MAX = 0, niveau = 0;

    const int  MIN = 1;

    srand(time(NULL));

    printf("Choisissez votre difficulté :\n"); // choix des niveaux

    printf("Lvl 1.Entre 1 et 50.\n");

    printf("Lvl 2.Entre 1 et 100.\n");

    printf("Lvl 3.Entre 1 et 1000.\n");

    scanf("%d",&niveau);

switch(niveau)

    {

   case 1 :

    MAX=50;

    break ;

    case 2 :

    MAX=100;

    break;

    case 3 :

    MAX=1000;

    break;

    }

//tu rajoutes ici le RAND

    nombremystere = (rand()%(MAX-MIN+1))+MIN;

do

{

    printf("Trouvez le nombre mystere :\n");

    scanf("%d", &nombreentre);

    if(nombreentre<nombremystere)

    printf("C'est plus !\n");

    else if(nombreentre>nombremystere)

    printf("C'est moins !\n");

    else

    printf("****Vous avez gagnez !****"),printf(" Mais vous l'avez fait en %d coups !\n",compteur);

    compteur++; // nombre de coups

}    while (nombremystere!= nombreentre);

}


Petite parenthèse concernant ton switch, il faut toujours mettre une valeur par défaut dans tes cas; si tu tappes "4" au choix du niveau il se passe quoi ?^^

switch(niveau)

    {

   case 1 :

    MAX=50;

    break ;

    case 2 :

    MAX=100;

    break;

    case 3 :

    MAX=1000;

    break;

    default:
    MAX=1000; //1000 par exemple, ou alors tu peux mettre une erreur et terminer ton programme
    break;
    }



  • Partager sur Facebook
  • Partager sur Twitter
3 janvier 2014 à 12:22:40

Merci à beaucoup à tous ceux qui m'ont répondu car maintenant mon jeu marche très bien.

^^

J'ai juste une dernière question avant de fermer ce topic :

Comment vous faites pour faire des capture comme Steph311 ???

Merci

  • Partager sur Facebook
  • Partager sur Twitter
3 janvier 2014 à 12:57:38

quand tu redige ton message tu clic sur le bouton "</>" et tu choisi c++
  • Partager sur Facebook
  • Partager sur Twitter
3 janvier 2014 à 19:17:45

OK merci beaucoup pour toutes vos réponses je ferme donc maintenant ce topic :D

Bonne continuation à tous .

  • Partager sur Facebook
  • Partager sur Twitter
17 mars 2018 à 18:57:42

Bonjour!

j' apprend la programmation du langage c dans openclassroom et je suis arrivé au niveau de programmtion du jeu, j ai vue correction proposé et j'ai compris le proceder

mais j' ai du mal a proposé la suite!

j' ai passé toute journée en train de travaillé la dessus mais je n' aboutis pas a la solution j' ai besoin d'aide svp!! 

-
Edité par emmanuelkamanda 17 mars 2018 à 18:58:51

  • Partager sur Facebook
  • Partager sur Twitter
17 mars 2018 à 20:17:35

Tu as besoin d'aide ? Dans ce cas tu crées ton propre sujet, au lieu de remonter de vieux sujet, ensuite tu poses une question précise sur ton problème. Aussi, tu postes le code que tu as déjà fait (en utilisant le bouton code </> du forum !

-
Edité par rouloude 17 mars 2018 à 20:17:59

  • Partager sur Facebook
  • Partager sur Twitter
17 mars 2018 à 21:56:10

oui j'ai besoin d'aide

desolé je n'avais pas vu comment crée un nouveau sujet

  • Partager sur Facebook
  • Partager sur Twitter
19 février 2020 à 23:46:29

darkazeri1998 a écrit:

Merci à beaucoup à tous ceux qui m'ont répondu car maintenant mon jeu marche très bien.

^^

J'ai juste une dernière question avant de fermer ce topic :

Comment vous faites pour faire des capture comme Steph311 ???

Merci



  • Partager sur Facebook
  • Partager sur Twitter
20 février 2020 à 0:54:40

@IlyasBen:
Peux-tu m'expliquer comment on fait un copier-coller sur une capture d'écran? :)
  • Partager sur Facebook
  • Partager sur Twitter

Le Tout est souvent plus grand que la somme de ses parties.

20 février 2020 à 11:43:20

Bonjour,

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Je ferme ce sujet. En cas de désaccord, me contacter par MP.

  • Partager sur Facebook
  • Partager sur Twitter