Erreur de code en c...

Résolu
Luvial -  
fiddy Messages postés 11069 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.
A voir également:

3 réponses

fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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
Pacorabanix Messages postés 3248 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
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Ah oui, j'avais même pas vu l'erreur d'accolade.
Bien vu ;-)))
0
Luvial
 
Effectivement, merci ;)
0