Erreur de code en c...

Résolu
Bonsoirs,

Je voudrais savoir pourquoi mon programme, quand il trouve le nombre mystère n'affiche pas "Bravo..." puis demande d'appuyer sur une touche pour quitter ?

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
int Quiter=0;
int MAX=100;
int MIN=1;
srand(time(NULL));
int nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
int nombrechoisis=0;

printf("Ecris un nombre et cherche le nombre mystere! :p \n");
scanf("%d",&nombrechoisis);

    while (Quiter==0)
    {
        if (nombreMystere!=nombrechoisis)
        {
            if (nombreMystere>=nombrechoisis)
            {
                printf("Faux! Il est plus grand !\n");
                printf("Allez, ecris un nombre et cherche le nombre mystere! :p \n");
                scanf("%d",&nombrechoisis);
            }
            else if (nombreMystere<=nombrechoisis)
            {
                printf("Faux! Il est plus petit !\n");
                printf("Allez, ecris un nombre et cherche le nombre mystere! :p \n");
                scanf("%d",&nombrechoisis);
            }

        else
        {
            printf("Bravo,tu as trouve ! Le nombre était bien %d !\n",nombreMystere);
            Quiter=1;
        }
       }
    }

return 0;
}



Merci d'avance.
Configuration: Windows 7
Firefox 3.5.7

3 réponses

  1. Contributeur
    Bonjour,

    Tu peux simplifier grandement tes boucles if.
    Si (a>b) Alors
       Afficher "Supérieur"
    Sinon Si (a<b) Alors
       Afficher "Inférieur"
    Sinon
       Afficher "Bravo"
    Fin Si
    

    De plus tu peux mettre en commun le scanf("%d"...) pour ne le mettre qu'une fois.
    Par ailleurs, en fait ton programme affiche bien bravo, mais la fenêtre se ferme aussitôt puisqu'elle rencontre le "return 0" final. Deux solutions : soit tu lances ton programme en console, tu mets system("Pause"); avant le return 0.

    Cdlt,
    1. c'est une erreur d'imbrication de if... else incorrecte.

      Ceci serait aisément remarquable, si tu indentais correctement ton code :

      compare :
      int main () {
          if (blabla) 
          {
              instruction;
              if (truc) 
              {
                  instructions;
                  instructions;
              }
              else if(autre truc) 
              {
                  autre instruction;
              }
              else
              {
                  DERNIERE INSTRUCTION;
              }
          }
      }


      avec :

      int main () {
          if (blabla) 
          {
              instruction;
              if (truc) 
              {
                  instructions;
                  instructions;
              }
              else if(autre truc) 
              {
                  autre instruction;
              }
          }
          else 
          {
              DERNIERE INSTRUCTION;
          }
      }


      Dans le premier cas, DERNIERE INSTRUCTION; est exécutée si blabla est vrai mais que ni truc ni autre truc n'est vrai.
      Dans le deuxième DERNIERE INSTRUCTION; est exécutée si blabla n'est pas vrai.

      On voit clairement à quel if... correspond quelle isntruction.

      A méditer !
      1. Contributeur
        Ah oui, j'avais même pas vu l'erreur d'accolade.
        Bien vu ;-)))