Langage C: Problème d'accolades!

Résolu/Fermé
elayyy - 27 juin 2009 à 10:46
 elayyy - 28 juin 2009 à 11:19
Bonjour,je débute en programmation. J'ai commencé à programmer un petit jeu, vous devez surement connaître "Le Jeu Du Nombre Mystère!". L'ordi à un nobre en tête et il faut le trouver!
Bref...J'ai fait un petit menu et y'a plein d'accolades et je m'enbrouille... Pourtant j'ai relu, j'ai même imprimé mon code source et j'ai relié les accolades entre elles... Rien n'y fait!
si vous pouvez m'aidez...



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

int main ()
{//début "int main"
srand(time(NULL));

const int MAX = 100, MIN = 1;

int nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;

int choix=0, solution=0, tapez1=0;


do
{//début de la boucle retour au menu à partir de la fin du jeu
do
{//début de la boucle retour au menu à partir de la fin des instructions

{
printf ("***LE JEU DU NOMBRE MYSTERE***\n\n");//donc voila le menu
printf ("1.Jouer\n");
printf ("2. Instructions\n\n");
printf ("entrez 1 ou 2\n\n");
scanf ("%d", &solution);// demande à l'utilisateur si il veut jouer ou lire instruction
}

switch (solution)//correspond à "scanf" ci-dessus
{//début "switch"
case 1:
{// début case 1
do//boucle du jeu lui même
{
printf ("Entrez le nombre mystere:\n\n");
scanf ("%d", &choix);
printf ("\n\n");



if (choix > nombreMystere)//si le nombre plus grand
{
printf ("Trop Grand!\n\n");
}

else if (choix < nombreMystere)//si nombre plus petit
{
printf ("Trop Petit!\n\n");
}

else//si bonne réponse
{
printf ("Bravo, vous avez trouvé le nombre mystere!\n\n");
printf ("tapez 1 pour retourner au menu");
scanf ("%d", &tapez1);
}
}//fin de la boucle du jeu lui même
while (choix != nombreMystere);
}// fin de la boucle retour au menu à partir de la fin du jeu
while ( tapez1==1)
}//fin de la case 1
break;

case 2:
{//début case 2
printf ("***LE JEU DU NOMBRE MYSTERE***\n\n");
printf ("Le but de ce jeu est de trouver le nombre que l'ordinateur a en memoire.\n");
printf ("Bien sur, il faut le trouver avec le moins de coups possible.\n\n");
printf ("pour revenir au menu, tapez 1\n\n");
scanf ("%d", &tapez1);
}////fin de la boucle retour au menu à partir de la fin des instructions
while (tapez1==1)
}//fin de la case 2
break;
}//fin du switch

return 0;
}//fin de la fonction "int main"


Merci d'avance pour votre réponse!!!!
A voir également:

3 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
27 juin 2009 à 12:33
Salut,
Il n'y a pas que des erreurs d'accolades.
N'oublie pas le point virgule à la fin du do while. N'oublie pas d'écrire le do ou le while lorsque tu fais un do while.
Voici le code corrigé (relis bien les conditions que j'ai rajoutées, je les ai juste mises pour que ça compile).

Sinon, si tu as des problèmes de ce genre, c'est que tu ne dois pas utiliser un IDE (code::blocks par exemple). L'avantage est qu'il met en couleur et t'indente le tout. L'indentation est primordiale.

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

int main ()
{//début "int main"
    srand(time(NULL));

    const int MAX = 100, MIN = 1;

    int nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;

    int choix=0, solution=0, tapez1=0;


    do
    {//début de la boucle retour au menu à partir de la fin du jeu
        do
        {//début de la boucle retour au menu à partir de la fin des instructions
            printf ("***LE JEU DU NOMBRE MYSTERE***\n\n");//donc voila le menu
            printf ("1.Jouer\n");
            printf ("2. Instructions\n\n");
            printf ("entrez 1 ou 2\n\n");
            scanf ("%d", &solution);// demande à l'utilisateur si il veut jouer ou lire instruction
        }while(solution==2);

        switch (solution)//correspond à "scanf" ci-dessus
        {//début "switch"
            case 1:
                do{// début case 1
                    do//boucle du jeu lui même
                    {
                        printf ("Entrez le nombre mystere:\n\n");
                        scanf ("%d", &choix);
                        printf ("\n\n");



                        if (choix > nombreMystere)//si le nombre plus grand
                        {
                            printf ("Trop Grand!\n\n");
                        }

                        else if (choix < nombreMystere)//si nombre plus petit
                        {
                            printf ("Trop Petit!\n\n");
                        }

                        else//si bonne réponse
                        {
                            printf ("Bravo, vous avez trouvé le nombre mystere!\n\n");
                            printf ("tapez 1 pour retourner au menu");
                            scanf ("%d", &tapez1);
                        }
                    }//fin de la boucle du jeu lui même
                    while (choix != nombreMystere);
                }// fin de la boucle retour au menu à partir de la fin du jeu
                while ( tapez1==1);
                break;

            case 2:
                do {//début case 2
                    printf ("***LE JEU DU NOMBRE MYSTERE***\n\n");
                    printf ("Le but de ce jeu est de trouver le nombre que l'ordinateur a en memoire.\n");
                    printf ("Bien sur, il faut le trouver avec le moins de coups possible.\n\n");
                    printf ("pour revenir au menu, tapez 1\n\n");
                    scanf ("%d", &tapez1);
                }////fin de la boucle retour au menu à partir de la fin des instructions
                while (tapez1==1);
                break;
        }//fin du switch
    }while(1);
    return 0;
}
1
Ce programme, tel qu'il est écrit, est incompilable; ce n'est pas un problème de parenthèses, c'est un problème de structure: les boucles sont à moitié imbriquées dans le 'switch'. Elles commencent avant le 'switch' et se terminent dans le 'switch'; cela ne peut aller: la boucle est un bloc et le switch est un autre bloc, les blocs doivent être dissociés ou complètement imbriqués.
Je te propose une solution épurée et quelque peu modifiée :-))
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>

#define MIN 1
#define MAX 100

int main ()
{
  int nombreMystere, choix, solutionProposee;

  srand(time(NULL));

  while (1)
  {
    printf ("\n\n***LE JEU DU NOMBRE MYSTERE***\n\n"); // Donc voilà le menu
    printf ("0 -> Fin du jeu\n");
    printf ("1 -> Jouer\n");
    printf ("x -> Instructions\n\n");
    printf ("Votre choix: ");
    scanf ("%d", &choix); // Demande à l'utilisateur s'il veut jouer ou lire instruction

    switch (choix)
    {
      case 0: // Fin du jeu
        return 0;
      case 1: // Jouer
        nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
        while (1) // Boucle à la recherche de la solution
        {
          printf ("Entrez le nombre mystère:");
          scanf ("%d", &solutionProposee);

          if (solutionProposee > nombreMystere) // Si le nombre est plus grand
            printf ("   -> Trop Grand!\n");
          else if (solutionProposee < nombreMystere) // Si nombre est plus petit
            printf ("   -> Trop Petit!\n");
          else // Si bonne réponse
          {
            printf ("\nBravo, vous avez trouvé le nombre mystere!\n\n");
            break; // Sortie de la boucle
          }
        }
        break;

      default:
        printf ("***LE JEU DU NOMBRE MYSTERE***\n\n");
        printf ("Le but de ce jeu est de trouver le nombre que l'ordinateur a en mémoire.\n");
        printf ("Bien sûr, il faut le trouver avec le moins de coups possibles.");
        break; // Non nécessaire
    }
  }

  return 0;
}
Bonne compréhension.
1
Merci à tous, je crois qu'il faut que je revois mon cours...

merci encore
@+
0