Erreur de code en c...

Résolu
Luvial -  
fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   -
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. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    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
  2. Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   663
     
    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
    1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Ah oui, j'avais même pas vu l'erreur d'accolade.
      Bien vu ;-)))
      0