Erreur en language C

Fermé
georgette - 25 nov. 2009 à 21:31
toto1983 Messages postés 205 Date d'inscription samedi 16 mai 2009 Statut Membre Dernière intervention 25 mars 2010 - 27 nov. 2009 à 12:20
Bonjour,

J'ai fais un post hier mais je ne peux pas l'éditer. Donc voila, quand on choisit 1 pour le nombre de joueurs, ça marche bien ( le choix du niveau ok, le jeu marche parfaitement en fonction du niveau etc... ). Mais voila quand on choisit 2, rien ne s'execute... Je pense que cela vient de if / else if mais je ne vois pas ou ça ne va pas...
voici mon code :

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

int main(int argc, char *argv[])
{
    printf ("\n                    N O M B R E M Y S T E R E \n\n\n");
    int choixMenu = 0;
    int nombreJoueur = 0;
    printf ("Nombre de joueur(s) : \n\n1 . 1 joueur\n2 . 2 joueurs\n\n");
    printf ("Combien de joueur(s) ? \n\n");
    scanf ("%d", &nombreJoueur);

if (nombreJoueur == 1)
{
    printf ("\nNiveau : \n\n1 . Facile\n2 . Normal\n3 . Difficil\n\n");
    printf ("Quel niveau de difficulte ?\n\n");
    scanf ("%d", &choixMenu);
    if (choixMenu == 1)
    {
    printf ("\nPour trouver le nombre mystere, entrez un nombre entre 1 et 100.\n\n\n");
    const int MAX = 100, MIN = 1;
    int nombreMystere = 0, score = 0;
    srand(time(NULL)); // Initialisation du générateur de nombre aléatoire
    nombreMystere = (rand() % (MAX - MIN + 1)) + MIN; // Fonction pour choisir nombre aléatoire entre MAX et MIN
    int nombre = 0;
    while (nombre != nombreMystere)
    {
    printf ("Quel est le NOMBRE MYSTERE ? \n\n");
    scanf ("%d", &nombre);
    printf ("\n");
    score++;


        if (nombre > nombreMystere)
        {
            printf ("C'est moins!\n\n\n");
        }
        if (nombre < nombreMystere)
        {
            printf ("C'est plus!\n\n\n");
        }

    }
        if (nombre = nombreMystere)
        {
            printf ("Bravo! Vous avez trouve le NOMBRE MYSTERE!\n\nVous avez trouve le NOMBRE MYSTERE en %d coups\n\n", score);
        }
    }

    else if (choixMenu == 2)
    {
    printf ("\nPour trouver le nombre mystere, entrez un nombre entre 1 et 1000.\n\n\n");
    const int MAX = 1000, MIN = 1;
    int nombreMystere = 0, score = 0;
    srand(time(NULL)); // Initialisation du générateur de nombre aléatoire
    nombreMystere = (rand() % (MAX - MIN + 1)) + MIN; // Fonction pour choisir nombre aléatoire entre MAX et MIN
    int nombre = 0; // Nombre entré par l'utilisateur
    while (nombre != nombreMystere)
    {
    printf ("Quel est le NOMBRE MYSTERE ? \n\n");
    scanf ("%d", &nombre);
    printf ("\n");
    score++;


        if (nombre > nombreMystere)
        {
            printf ("C'est moins!\n\n\n");
        }
        if (nombre < nombreMystere)
        {
            printf ("C'est plus!\n\n\n");
        }

    }
        if (nombre = nombreMystere)
        {
            printf ("Bravo! Vous avez trouve le NOMBRE MYSTERE!\n\nVous avez trouve le NOMBRE MYSTERE en %d coups\n\n", score);
        }
    }
    else if (choixMenu == 3)
    {
    printf ("\nPour trouver le nombre mystere, entrez un nombre entre 1 et 10000.\n\n\n");
    const int MAX = 10000, MIN = 1;
    int nombreMystere = 0, score = 0;
    srand(time(NULL)); // Initialisation du générateur de nombre aléatoire
    nombreMystere = (rand() % (MAX - MIN + 1)) + MIN; // Fonction pour choisir nombre aléatoire entre MAX et MIN
    int nombre = 0;// Nombre entré par l'utilisateur
    while (nombre != nombreMystere)
    {
    printf ("Quel est le NOMBRE MYSTERE ? \n\n");
    scanf ("%d", &nombre);
    printf ("\n");
    score++;


        if (nombre > nombreMystere)
        {
            printf ("C'est moins!\n\n\n");
        }
        if (nombre < nombreMystere)
        {
            printf ("C'est plus!\n\n\n");
        }

    }
        if (nombre = nombreMystere)
        {
            printf ("Bravo! Vous avez trouve le NOMBRE MYSTERE!\n\nVous avez trouve le NOMBRE MYSTERE en %d coups\n\n", score);
        }
    }
else if (nombreJoueur == 2)
{
    printf ("\nNiveau : \n\n1 . Facile\n2 . Normal\n3 . Difficil\n\n");
    printf ("Quel niveau de difficulte ?\n\n");
    scanf ("%d", &choixMenu);

        if (choixMenu == 1)
    {
    int nombreMystere = 0, score = 0;
    printf ("Joueur 1, choisissez un nombre mystère en 1 et 100\n\n");
    scanf ("%d", &nombreMystere);
    printf ("\nPour trouver le nombre mystere, entrez un nombre entre 1 et 100.\n\n\n");
    int nombre = 0;
    scanf ("%d", &nombre);
    while (nombre != nombreMystere)
    {
    printf ("Quel est le NOMBRE MYSTERE ? \n\n");
    scanf ("%d", &nombre);
    printf ("\n");
    score++;


        if (nombre > nombreMystere)
        {
            printf ("C'est moins!\n\n\n");
        }
        if (nombre < nombreMystere)
        {
            printf ("C'est plus!\n\n\n");
        }

    }
        if (nombre = nombreMystere)
        {
            printf ("Bravo! Vous avez trouve le NOMBRE MYSTERE!\n\nVous avez trouve le NOMBRE MYSTERE en %d coups\n\n", score);
        }
    }

    else if (choixMenu == 2)
    {
    int nombreMystere = 0, score = 0;
    printf ("Joueur 1, choisissez un nombre mystère en 1 et 1000\n\n");
    scanf ("%d", &nombreMystere);
    printf ("\nPour trouver le nombre mystere, entrez un nombre entre 1 et 1000.\n\n\n");
    int nombre = 0;
    scanf ("%d", &nombre);
    while (nombre != nombreMystere)
    {
    printf ("Quel est le NOMBRE MYSTERE ? \n\n");
    scanf ("%d", &nombre);
    printf ("\n");
    score++;


        if (nombre > nombreMystere)
        {
            printf ("C'est moins!\n\n\n");
        }
        if (nombre < nombreMystere)
        {
            printf ("C'est plus!\n\n\n");
        }

    }
        if (nombre = nombreMystere)
        {
            printf ("Bravo! Vous avez trouve le NOMBRE MYSTERE!\n\nVous avez trouve le NOMBRE MYSTERE en %d coups\n\n", score);
        }
    }
    else if (choixMenu == 3)
    {
    int nombreMystere = 0, score = 0;
    printf ("Joueur 1, choisissez un nombre mystère en 1 et 1000\n\n");
    scanf ("%d", &nombreMystere);
    printf ("\nPour trouver le nombre mystere, entrez un nombre entre 1 et 1000.\n\n\n");
    int nombre = 0;
    scanf ("%d", &nombre);
    while (nombre != nombreMystere)
    {
    printf ("Quel est le NOMBRE MYSTERE ? \n\n");
    scanf ("%d", &nombre);
    printf ("\n");
    score++;


        if (nombre > nombreMystere)
        {
            printf ("C'est moins!\n\n\n");
        }
        if (nombre < nombreMystere)
        {
            printf ("C'est plus!\n\n\n");
        }

    }
        if (nombre = nombreMystere)
        {
            printf ("Bravo! Vous avez trouve le NOMBRE MYSTERE!\n\nVous avez trouve le NOMBRE MYSTERE en %d coups\n\n", score);
        }


    }
}
}
}


voila Merci d'avance

8 réponses

Oula t'as pensé à découper ton programme en fonctions par hasard??? Parce que là ça fait un peu bloc, plein de conditions imbriquées et tout
0
Scuse moi je débute :$
Aufaite j'ai oublié de préciser que c'était une application console. Quand tu parles de "decouper", tu veux dire sauter des lignes entre les fonctions?
0
Découper en fonctions, c'est faire des sous programmes qui sont tous liés et qui communiquent entre eux si tu préfères.

Et même sans ça, l'indentation de ton code est pas bof, ça rend ton programme franchement difficilement lisible. Si tu veux de l'aide, contactes moi: martel.kvn@gmail.com
0
Rectification: l'indentation est bof*
0
Yuku Messages postés 199 Date d'inscription samedi 22 mars 2008 Statut Membre Dernière intervention 22 mars 2012 4
25 nov. 2009 à 22:11
En gros ce qu'on veut dire par "créer des fonctions", c'est que tu dois structurer ton programme. Tu verras ça quand tu progresseras, mais en gros ça veut dire la chose suivante :

Ton programme, en l'état, ressemble à la chose suivante :

main()
{
    // on choisit le nombre de joueurs
    // on fait les instructions correspondant au menu
    // on boucle jusqu'à ce que le joueur trouve la solution ou perde
}


Quand tu le structureras avec des fonctions, il pourra ressembler à la chose suivante :

--------------------------------------------------------------------------------------

main()
{
    selection_nombre_joueurs();
}

void selection_nombre_joueurs() 
{
    selection_niveau();
}

void selection_niveau()
{
    nombre_mystere();
}

void nombre_mystere()
{
    // contient les instructions et boucles du jeu.
}

--------------------------------------------------------------------------------------


Tu vois, tu entres dans le main() qui appelle la fonction qui sélectionne le nombre de joueurs.
En fonction du nombre de joueurs, tu entres dans la fonction de sélection du niveau, et une fois ceci fait tu appelles la fonction nombre_mystere() qui contient les instructions de ton jeu.

Bien sûr, tu peux passer en paramètre des variables dans tes fonctions et les réutiliser après, ainsi elles peuvent communiquer entre elles. Tu verras, c'est extrêmement utile !


Quant à ton problème, je suis en train d'y réfléchir.
0

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

Posez votre question
ah d'accord je crois que j'ai compris ce que c'était :)
Merci Yuku.
@Calli : je t'es envoyé un mail :)
0
Yuku Messages postés 199 Date d'inscription samedi 22 mars 2008 Statut Membre Dernière intervention 22 mars 2012 4
25 nov. 2009 à 22:20
J'ai trouvé ton problème.

En fait il est très simple : tu as mal fermé ton "if" initial qui vérifie le nombre de joueurs.
Rajoute une accolade fermante ( } ) juste avant ton else if (nombreJoueur == 2) à la ligne 113, et enlève une accolade fermante à la fin du programme :)
0
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 661
25 nov. 2009 à 22:31
j'ajouterai aussi pour appuyer ce que te disais qq'un d'autre qu'une bonne indentation permet d'éviter ce genre de soucis, difficiles à voir sinon.

En gros, il faut indenter lorsque tu ouvres une accolade, et enlever l'indentation lorsque tu fermes une accolade:
int fonction(void) {
    //des instructions
    if (qqchose) {
        //des instructions
        // encore
    } else {
        //d'autres
        if (autrechose) {
            //autres instru
            //encore
        }
    }
} 

ça c'est la manière que je préfère (Avec aussi quelques lignes vides pour clarifier certains morceaux de la fonction). Certains prennent une nouvelle ligne pour ouvrir les accolades :
int fonction(void) 
{
    //des instructions
    if (qqchose)
    {
        //des instructions
        // encore
    } 
    else 
    {
        //d'autres
        if (autrechose)
        {
            //autres instru
            //encore
        }
    }
} 


ce qui est très clair aussi, et peut-être préférable.

Dans tous les cas, on voit clairement en regardant à quel if ou quel while etc... correspond l'accolade fermante.
0
the F Messages postés 150 Date d'inscription dimanche 22 mars 2009 Statut Membre Dernière intervention 22 mars 2011 13
25 nov. 2009 à 23:11
@ georgette
Pense aussi a reunir toutes les declaration des variables des le debut du programme
0
toto1983 Messages postés 205 Date d'inscription samedi 16 mai 2009 Statut Membre Dernière intervention 25 mars 2010 13
27 nov. 2009 à 12:20
Euh ouais c normal ce code de gruik :(
0