Variable globale

Résolu
Bonjour
je suis sur un programme, j'ai déclaré des variables globales (je débute je n'arrive pas à faire autrement) et j'obtiens le message : 6 variable-size type declared outside of any function
Ca veut dire qu'une variable globale ne peut pas etre modifier???
A l'aide par pitié je desespere

24 réponses

  1. Je les ai déclaré comme suit (je ne mets qu'une partie du programme) :
    #include<stdio.h>
    #include<conio.h>
    #include<stdlib.h>
    #include<time.h>
    int nbMine=10, i, j,nombreLigne=9,nombreColonne=9,tab[nombreLigne][nombreColonne];
    void personalise(void)
    {
        int Ligne=-1, Colonne=-1;
        printf("=>Personalisation du jeu<=");
        while(Ligne<1 || Ligne>10)
        {puts("\n\nDe quelle longueur voulez vous que votre champ de mine soit? (9 par defaut)");
        scanf("%d", &nombreLigne);//non-lvalue in unary '&'
        Ligne=nombreLigne;}
        while(Colonne<1 || Colonne>10)
        {puts("\n\nDe quelle largeur voulez vous que votre champ de mine soit? (9 par defaut)");
        scanf("%d", &nombreColonne);//non-lvalue in unary '&'
        Colonne=nombreColonne;}
        do{
        puts("\n\nCombien de mines voulez vous avoir a desamorcer? (10 par defaut)");
        scanf("%d", &nbMine);
        }while(nbMine>nombreLigne*nombreColonne);
    }
    
    void choisir (void) 
    {
         int choix;
          
              textcolor(2);
              printf("Que voulez vous faire?\n\t-1 Commencer a jouer\n\t-2 Personnaliser le jeu\n\t-3 Voir les regles du jeu\n");
              scanf("%d", &choix);
              system("cls");
              switch(choix)
              {
                           case 1 :
                                {
                                printf("Veuillez entrer votre niveau de jeu : \n\t-1 Debutant\n\t-2 Intermediaire\n\t-3 Expert\n");
                                scanf("%d",&choix);
                                switch(choix)
                                {
                                             case 1 : 
                                                  {
                                                      nombreLigne=9;
                                                      nombreColonne=9;
                                                      nbMine=10;
                                                  }
                                                  break;
                                             case 2 : 
                                                  {
                                                        nombreLigne=10;
                                                        nombreColonne=10;
                                                        nbMine=40;
                                                  }
                                                       break;
                                             case 3 : 
                                                  {
                                                       nombreLigne=10;
                                                       nombreColonne=10;
                                                       nbMine=60;
                                                  }
                                                                break;
                                                            default : ;
                                }
                                }
                                break;
                           case 2 : 
                                personalise ();
                                     break;
                           case 3 : 
                                          printf("=>Les Regles du jeu<=\n\nLe jeu se presente sous la forme d'un tableau de cases a deux dimensions. Certaines cases contiennent des mines. Au depart toutes les cases sont masquees (et on ne voit donc pas les mines). L'objectif est de localiser les mines (le nombre de mines restant a localiser etant donne au joueur). Le joueur peut au choix decouvrir le contenu d'une case, ou la marquer pour signaler la presence d'une mine (c'est son hypothese et le decompte des mines se fixe la dessus). Les cases decouvertes affichent le nombre de mines dans les 8 cases voisines, sauf si la case contient elle meme une mine (auquel cas le joueur meurt et la partie est termine). Si le joueur n'est pas mort, la partie se termine lorsque le joueur a decouvert toutes les cases (sauf celles avec les mines). Son score est le temps mis pour terminer.\n");
                                          break;
                           default : ;
              }
              }
    void jeu ( )
    {;}
                   
    void affichage_tableau ( )
    {
         printf("    ");//4 espace
         for(j=0;j<nombreColonne;j++)//revoir l'initialisation avc la convention
              {
                              printf("%d ",j);
              }
              printf("\n  -");
              for(j=0;j<nombreColonne;j++)
              {
              printf("--");
              }
              for(i=0;i<nombreLigne;i++)
              {
                              puts(" ");
                              printf("%d | ",i);
                              for(j=0;j<nombreColonne;j++)
                              {
                                              printf("x ",tab[i][j]); // affichage du tableau
                              }
              }
              puts("\n");
    }
                   
              
    main(void)
    {
              int lignemine,colonnemine,recommencer,tabcase[nombreLigne][nombreColonne], i, j,mine=0,mineAlentour=0,reponse,confirmCase,compteurMine=10,caseDecouverte=0,nbCase=81;
              do{
              system("cls");
              textcolor(4);
              printf("\n\n\n\n\t\t\t\t===>>>LE DEMINEUR<<===\n\n\n\n");
              textcolor(2);
              choisir( );
              nbCase=nombreColonne*nombreLigne;
              system("pause");
              system("cls");    
              affichage_tableau( );
              /*Initilisation du tableau avec les mines et les mines alentours*/
              srand(time(NULL));

    J'ai fait une erreur?
    1. Bonjour didy_gwatinik,

      ...
      #include<time.h>

      #define nbMine 10 //au lieu de int, lorsque tu changes ce paramètre tout le programme est impacté
      int i, j; //J'initialliserai tout de suite ces variables.Même si tu le fais dans tes boucles
      #define nombreLigne 9
      #define nombreColonne 9
      int tab[nombreLigne][nombreColonne];

      void personalise(void)
      ...

      Pour ma part, je racourccirai les noms ! Ils sont trop long.
      nombreLigne =>NbrLig
      nombreColonne =>NbrCol
      etc...

      Essaye...
      1. J'ai mis ca (c'est toujours une partie du code):
        #include<stdio.h>
        #include<conio.h>
        #include<stdlib.h>
        #include<time.h>
        #define nbMine 10
        #define nombreLigne 9
        #define nombreColonne 9
        int i=0, j=0;
        int tab[nombreLigne][nombreColonne];
        void personalise(void)
        {
            int Ligne=-1, Colonne=-1;
            printf("=>Personalisation du jeu<=");
            while(Ligne<1 || Ligne>10)
            {puts("\n\nDe quelle longueur voulez vous que votre champ de mine soit? (9 par defaut)");
            scanf("%d", &nombreLigne);
            Ligne=nombreLigne;}
            while(Colonne<1 || Colonne>10)
            {puts("\n\nDe quelle largeur voulez vous que votre champ de mine soit? (9 par defaut)");
            scanf("%d", &nombreColonne);
            Colonne=nombreColonne;}
            do{
            puts("\n\nCombien de mines voulez vous avoir a desamorcer? (10 par defaut)");
            scanf("%d", &nbMine);
            }while(nbMine>nombreLigne*nombreColonne);
        }
        
        void choisir (void) 
        {
             int choix;
              
                  textcolor(2);
                  printf("Que voulez vous faire?\n\t-1 Commencer a jouer\n\t-2 Personnaliser le jeu\n\t-3 Voir les regles du jeu\n");
                  scanf("%d", &choix);
                  system("cls");
                  switch(choix)
                  {
                               case 1 :
                                    {
                                    printf("Veuillez entrer votre niveau de jeu : \n\t-1 Debutant\n\t-2 Intermediaire\n\t-3 Expert\n");
                                    scanf("%d",&choix);
                                    switch(choix)
                                    {
                                                 case 1 : 
                                                      {
                                                          nombreLigne=9;
                                                          nombreColonne=9;
                                                          nbMine=10;
                                                      }
                                                      break;
                                                 case 2 : 
                                                      {
                                                            nombreLigne=10;
                                                            nombreColonne=10;
                                                            nbMine=40;
                                                      }
                                                           break;
                                                 case 3 : 
                                                      {
                                                           nombreLigne=10;
                                                           nombreColonne=10;
                                                           nbMine=60;
                                                      }
                                                                    break;
                                                                default : ;
                                    }
                                    }
                                    break;
                               case 2 : 
                                    personalise ();
                                         break;
                               case 3 : 
                                              printf("=>Les Regles du jeu<=\n\nLe jeu se presente sous la forme d'un tableau de cases a deux dimensions. Certaines cases contiennent des mines. Au depart toutes les cases sont masquees (et on ne voit donc pas les mines). L'objectif est de localiser les mines (le nombre de mines restant a localiser etant donne au joueur). Le joueur peut au choix decouvrir le contenu d'une case, ou la marquer pour signaler la presence d'une mine (c'est son hypothese et le decompte des mines se fixe la dessus). Les cases decouvertes affichent le nombre de mines dans les 8 cases voisines, sauf si la case contient elle meme une mine (auquel cas le joueur meurt et la partie est termine). Si le joueur n'est pas mort, la partie se termine lorsque le joueur a decouvert toutes les cases (sauf celles avec les mines). Son score est le temps mis pour terminer.\n");
                                              break;
                               default : ;
                  }
                  }
        void jeu ( )
        {;}
                       
        void affichage_tableau (void)
        {
             printf("    ");//4 espace
             for(j=0;j<nombreColonne;j++)//revoir l'initialisation avc la convention
                  {
                                  printf("%d ",j);
                  }
                  printf("\n  -");
                  for(j=0;j<nombreColonne;j++)
                  {
                  printf("--");
                  }
                  for(i=0;i<nombreLigne;i++)
                  {
                                  puts(" ");
                                  printf("%d | ",i);
                                  for(j=0;j<nombreColonne;j++)
                                  {
                                                  printf("x ",tab[i][j]); // affichage du tableau
                                  }
                  }
                  puts("\n");
        }
                       
                  
        main(void)
        {
                  int lignemine,colonnemine,recommencer,tabcase[nombreLigne][nombreColonne], i, j,mine=0,mineAlentour=0,reponse,confirmCase,compteurMine=10,caseDecouverte=0,nbCase=81;
                  do{
                  system("cls");
                  textcolor(4);
                  printf("\n\n\n\n\t\t\t\t===>>>LE DEMINEUR<<===\n\n\n\n");
                  textcolor(2);
                  choisir();
                  nbCase=nombreColonne*nombreLigne;
                  system("pause");
                  system("cls");    
                  affichage_tableau( );
                  /*Initilisation du tableau avec les mines et les mines alentours*/
                  srand(time(NULL));
                   for(i=0;i<nombreLigne;i++)
                  {
                                  for(j=0;j<nombreColonne;j++)
                                  {
                                                  tab[i][j]=rand( )%2;
                                                  if ((tab[i][j]>0.5) && (mine<nbMine))
                                                  {
                                                                      tab[i][j]=9;
                                                                      mine++;
                                                  }   
                                                  else{tab[i][j]=0;}
                                  }              
                  }
                  for(i=0;i<nombreLigne;i++)
                  {
                                            for(j=0;j<nombreColonne;j++)
                                            {
                                                                        if(tab[i][j]!=9)
                                                                        {
                                                                        if (tab[i-1][j+1]==9)
                                                                        mineAlentour++;//Case diagonale haut gauche
                                                                        if (tab[i][j+1]==9)
                                                                        mineAlentour++;//case du haut
                                                                        if (tab[i+1][j+1]==9)
                                                                        mineAlentour++;//Case diagonale haut droite
                                                                        if (tab[i-1][j]==9)
                                                                        mineAlentour++;//CAse de gauche
                                                                        if (tab[i+1][j]==9)
                                                                        mineAlentour++;//Case de droite
                                                                        if (tab[i-1][j-1]==9)
                                                                        mineAlentour++;//case diagonale bas gauche
                                                                        if (tab[i][j-1]==9)
                                                                        mineAlentour++;//case du bas
                                                                        if (tab[i+1][j-1]==9)
                                                                        mineAlentour++;//case diagonale droite bas
                                                                        tab[i][j]=mineAlentour;
                                                                        }                
                                                                        mineAlentour=0;
                                            }
                  }
                  printf("\n    ");
                    for(j=0;j<nombreColonne;j++)
                  {
                                  printf("%d ",j);
                  }
                  printf("\n  -");
                  for(j=0;j<nombreColonne;j++)
                  {
                  printf("--");
                  }
                  for(i=0;i<nombreLigne;i++)
                  {
                                  puts("");
                                  printf("%d | ",i);
                                  for(j=0;j<nombreColonne;j++)
                                  {
                                                  printf("%d ",tab[i][j]); // affichage du tableau
                                                  
                                  }
                  }
                  //initialisation du tableau d'affichage//
                  for(i=0;i<nombreLigne;i++)
                  {
                                  for(j=0;j<nombreColonne;j++)
                                  {
                                                  tabcase[i][j]=0;//on initialise le tableau a 0 car toutes les cases sont masquées.
                                  }
                  }
                  //Choix de la case//
          while(caseDecouverte<=nbCase-nbMine)
          {      
                  while(confirmCase!=1)
                  {i=-1;
                  confirmCase=0;
                  do{
                  puts("\nQuelles sont les coordonnees de la case que vous souhaitez choisir (ligne colonne)?");
                  scanf("%d",&i);
                  scanf("%d",&j);
                  }while(i<0 || i>nombreLigne+1 || j<0 || j>nombreColonne+1);                  
                  do{
                  printf("Etes vous sur de vouloir choisir cette case? (1) Oui (2) Non\n");
                  scanf("%d", &confirmCase);
                  }while(confirmCase<1 || confirmCase>2)
                  }
                  confirmCase=0;
                  //Choix case marquer ou desamorcer
                  printf("Que voulez vous faire de la case %d %d? La desamorcer (1) ou la marquer (2) en tant que mine?\n", i ,j);
                  scanf("%d",&reponse );//Blinder les saisies
                  system("cls");
                  if(reponse==1 && tab[i][j]!=9)//on affecte a la case une valeur suivant le choix de lutilisateur
                  tabcase[i][j]=1;


        Mais j'obtiens l'erreur suivante :
        17 non-lvalue in unary `&'
        1. Bonjour didy_gwatinik,

          Le fait d'appeler la touche F1(aide) que dit ton compilateur ?
          As-tu essayé de te mettre en en mode pas à pas ?

          1. Je ne sais pas comment on se met en mode pas à pas et la touche F1 ne donne rien
            1. Bonjour didy_gwatinik,

              J'utilises C++ BORLAND V6 et je passe en mode console.
              Pour le travail en mode pas à pas : c'est F7.
              Maintenant cela va dépendre de ton environnement, et de l'outil que tu utilises...
              Qu'as-tu ?
              1. Je ne pense pas que tu es ton temps à perdre mais pourrai tu copier mon code si je te le donne dans ton compilo pour voir l'erreur si tu n'a pas le temps ce n'est pas grave! merci tout de même pour ton aide
                1. Bonjour didy_gwatinik,

                  On peut toujours essayer. Mais comment faire pour rapatrier ton listing ?
                  1. Voila tout est la :
                    #include<stdio.h>
                    #include<conio.c>
                    #include<stdlib.h>
                    #include<time.h>
                    #define nbMine 10
                    #define nombreLigne 9
                    #define nombreColonne 9
                    int i=0, j=0;
                    int tab[nombreLigne][nombreColonne];
                    void personalise(void)
                    {
                        int Ligne=-1, Colonne=-1;
                        printf("=>Personalisation du jeu<=");
                        while(Ligne<1 || Ligne>10)
                        {puts("\n\nDe quelle longueur voulez vous que votre champ de mine soit? (9 par defaut)");
                        scanf("%d", &nombreLigne);
                        Ligne=nombreLigne;}
                        while(Colonne<1 || Colonne>10)
                        {puts("\n\nDe quelle largeur voulez vous que votre champ de mine soit? (9 par defaut)");
                        scanf("%d", &nombreColonne);
                        Colonne=nombreColonne;}
                        do{
                        puts("\n\nCombien de mines voulez vous avoir a desamorcer? (10 par defaut)");
                        scanf("%d", &nbMine);
                        }while(nbMine>nombreLigne*nombreColonne);
                    }
                    
                    void choisir (void) 
                    {
                         int choix;
                          
                              textcolor(2);
                              printf("Que voulez vous faire?\n\t-1 Commencer a jouer\n\t-2 Personnaliser le jeu\n\t-3 Voir les regles du jeu\n");
                              scanf("%d", &choix);
                              system("cls");
                              switch(choix)
                              {
                                           case 1 :
                                                {
                                                printf("Veuillez entrer votre niveau de jeu : \n\t-1 Debutant\n\t-2 Intermediaire\n\t-3 Expert\n");
                                                scanf("%d",&choix);
                                                switch(choix)
                                                {
                                                             case 1 : 
                                                                  {
                                                                      nombreLigne=9;
                                                                      nombreColonne=9;
                                                                      nbMine=10;
                                                                  }
                                                                  break;
                                                             case 2 : 
                                                                  {
                                                                        nombreLigne=10;
                                                                        nombreColonne=10;
                                                                        nbMine=40;
                                                                  }
                                                                       break;
                                                             case 3 : 
                                                                  {
                                                                       nombreLigne=10;
                                                                       nombreColonne=10;
                                                                       nbMine=60;
                                                                  }
                                                                                break;
                                                                            default : ;
                                                }
                                                }
                                                break;
                                           case 2 : 
                                                personalise ();
                                                     break;
                                           case 3 : 
                                                          printf("=>Les Regles du jeu<=\n\nLe jeu se presente sous la forme d'un tableau de cases a deux dimensions. Certaines cases contiennent des mines. Au depart toutes les cases sont masquees (et on ne voit donc pas les mines). L'objectif est de localiser les mines (le nombre de mines restant a localiser etant donne au joueur). Le joueur peut au choix decouvrir le contenu d'une case, ou la marquer pour signaler la presence d'une mine (c'est son hypothese et le decompte des mines se fixe la dessus). Les cases decouvertes affichent le nombre de mines dans les 8 cases voisines, sauf si la case contient elle meme une mine (auquel cas le joueur meurt et la partie est termine). Si le joueur n'est pas mort, la partie se termine lorsque le joueur a decouvert toutes les cases (sauf celles avec les mines). Son score est le temps mis pour terminer.\n");
                                                          break;
                                           default : ;
                              }
                              }
                    void jeu ( )
                    {;}
                                   
                    void affichage_tableau (void)
                    {
                         printf("    ");//4 espace
                         for(j=0;j<nombreColonne;j++)//revoir l'initialisation avc la convention
                              {
                                              printf("%d ",j);
                              }
                              printf("\n  -");
                              for(j=0;j<nombreColonne;j++)
                              {
                              printf("--");
                              }
                              for(i=0;i<nombreLigne;i++)
                              {
                                              puts(" ");
                                              printf("%d | ",i);
                                              for(j=0;j<nombreColonne;j++)
                                              {
                                                              printf("x ",tab[i][j]); // affichage du tableau
                                              }
                              }
                              puts("\n");
                    }
                                   
                              
                    main(void)
                    {
                              int lignemine,colonnemine,recommencer,tabcase[nombreLigne][nombreColonne], i, j,mine=0,mineAlentour=0,reponse,confirmCase,compteurMine=10,caseDecouverte=0,nbCase=81;
                              do{
                              system("cls");
                              textcolor(4);
                              printf("\n\n\n\n\t\t\t\t===>>>LE DEMINEUR<<===\n\n\n\n");
                              textcolor(2);
                              choisir();
                              nbCase=nombreColonne*nombreLigne;
                              system("pause");
                              system("cls");    
                              affichage_tableau( );
                              /*Initilisation du tableau avec les mines et les mines alentours*/
                              srand(time(NULL));
                               for(i=0;i<nombreLigne;i++)
                              {
                                              for(j=0;j<nombreColonne;j++)
                                              {
                                                              tab[i][j]=rand( )%2;
                                                              if ((tab[i][j]>0.5) && (mine<nbMine))
                                                              {
                                                                                  tab[i][j]=9;
                                                                                  mine++;
                                                              }   
                                                              else{tab[i][j]=0;}
                                              }              
                              }
                              for(i=0;i<nombreLigne;i++)
                              {
                                                        for(j=0;j<nombreColonne;j++)
                                                        {
                                                                                    if(tab[i][j]!=9)
                                                                                    {
                                                                                    if (tab[i-1][j+1]==9)
                                                                                    mineAlentour++;//Case diagonale haut gauche
                                                                                    if (tab[i][j+1]==9)
                                                                                    mineAlentour++;//case du haut
                                                                                    if (tab[i+1][j+1]==9)
                                                                                    mineAlentour++;//Case diagonale haut droite
                                                                                    if (tab[i-1][j]==9)
                                                                                    mineAlentour++;//CAse de gauche
                                                                                    if (tab[i+1][j]==9)
                                                                                    mineAlentour++;//Case de droite
                                                                                    if (tab[i-1][j-1]==9)
                                                                                    mineAlentour++;//case diagonale bas gauche
                                                                                    if (tab[i][j-1]==9)
                                                                                    mineAlentour++;//case du bas
                                                                                    if (tab[i+1][j-1]==9)
                                                                                    mineAlentour++;//case diagonale droite bas
                                                                                    tab[i][j]=mineAlentour;
                                                                                    }                
                                                                                    mineAlentour=0;
                                                        }
                              }
                              printf("\n    ");
                                for(j=0;j<nombreColonne;j++)
                              {
                                              printf("%d ",j);
                              }
                              printf("\n  -");
                              for(j=0;j<nombreColonne;j++)
                              {
                              printf("--");
                              }
                              for(i=0;i<nombreLigne;i++)
                              {
                                              puts("");
                                              printf("%d | ",i);
                                              for(j=0;j<nombreColonne;j++)
                                              {
                                                              printf("%d ",tab[i][j]); // affichage du tableau
                                                              
                                              }
                              }
                              //initialisation du tableau d'affichage//
                              for(i=0;i<nombreLigne;i++)
                              {
                                              for(j=0;j<nombreColonne;j++)
                                              {
                                                              tabcase[i][j]=0;//on initialise le tableau a 0 car toutes les cases sont masquées.
                                              }
                              }
                              //Choix de la case//
                      while(caseDecouverte<=nbCase-nbMine)
                      {      
                              while(confirmCase!=1)
                              {i=-1;
                              confirmCase=0;
                              do{
                              puts("\nQuelles sont les coordonnees de la case que vous souhaitez choisir (ligne colonne)?");
                              scanf("%d",&i);
                              scanf("%d",&j);
                              }while(i<0 || i>nombreLigne+1 || j<0 || j>nombreColonne+1);                  
                              do{
                              printf("Etes vous sur de vouloir choisir cette case? (1) Oui (2) Non\n");
                              scanf("%d", &confirmCase);
                              }while(confirmCase<1 || confirmCase>2)
                              }
                              confirmCase=0;
                              //Choix case marquer ou desamorcer
                              printf("Que voulez vous faire de la case %d %d? La desamorcer (1) ou la marquer (2) en tant que mine?\n", i ,j);
                              scanf("%d",&reponse );//Blinder les saisies
                              system("cls");
                              if(reponse==1 && tab[i][j]!=9)//on affecte a la case une valeur suivant le choix de lutilisateur
                              tabcase[i][j]=1;
                              else{if(reponse==2)
                              tabcase[i][j]=2;}
                                            if(tab[i][j]!=9 || reponse==2)//simple case
                                            {
                                                     //Affichage du tableau
                                                     printf("    ");//4 espace
                                                     for(j=0;j<nombreColonne;j++)
                                                     {
                                                     printf("%d ",j);
                                                     }
                                                     printf("\n  -");
                                                     for(j=0;j<nombreColonne;j++)
                                                     {
                                                     printf("--");
                                                     }
                                                     for(i=0;i<nombreLigne;i++)
                                                     {
                                                     puts("");
                                                     printf("%d | ",i);
                                                     for(j=0;j<nombreColonne;j++)
                                                     {
                                                                     if (tabcase[i][j]==1)
                                                                     {textcolor(6);printf("%d " ,tab[i][j]);
                                                                     caseDecouverte++;}
                                                                     if(tabcase[i][j]==2)
                                                                     {textcolor(8);printf("# ");}
                                                                     if(tabcase[i][j]==0) 
                                                                     {textcolor(10);printf("x ");}
                                                     textcolor(2);}
                                                     }
                              }
                              else{if(tab[i][j]==9)//c'est une mine alors partie perdue
                                   puts("Vous avez perdu! Partie terminee");
                              //Affichage du tableau de début
                                   printf("    ");//4 espace
                              for(j=0;j<nombreColonne;j++)
                              {
                                              printf("%d ",j);
                              }
                              printf("\n  -");
                              for(j=0;j<nombreColonne;j++)
                              {
                              printf("--");
                              }
                              for(i=0;i<nombreLigne;i++)
                              {
                                              puts("");
                                              printf("%d | ",i);
                                              for(j=0;j<nombreColonne;j++)
                                              {
                                                              if(tab[i][j]==9)
                                                              {textcolor(4);printf("* ");}
                                                              else{textcolor(2);
                                                              printf("%d ",tab[i][j]);
                                                              }
                                                            
                                             textcolor(2); }
                              }
                              caseDecouverte=80;//pour sortir de la boucle
                              }
                              system("pause");
                              //system("cls");
                              }
                             // GAGNER
                              if(caseDecouverte>nbCase-nbMine && caseDecouverte!=80)
                              {
                                                              system("cls");
                                                               printf("\a\a\n\nFELICITATIONS !!!, vous avez gagne");
                                                              //Affichage du tableau de début
                                   printf("    ");//4 espace
                              for(j=0;j<nombreColonne;j++)
                              {
                                              puts("");
                                              printf("%d ",j);
                              }
                              printf("\n  -");
                              for(j=0;j<nombreColonne;j++)
                              {
                              printf("--");
                              }
                              for(i=0;i<nombreLigne;i++)
                              {
                                              puts("");
                                              printf("%d | ",i);
                                              for(j=0;j<nombreColonne;j++)
                                              {
                                                              if(tab[i][j]==9)
                                                              {printf("* ");}
                                                              else{
                                                              printf("%d ",tab[i][j]);
                                                              }        
                                              }
                              }
                              }
                              textcolor(2);
                              printf("\nVoulez vous (1) recommencer (2) quitter\n");
                              scanf("%d", &recommencer);
                          }while(recommencer!=2);
                              getch();
                              return 0;
                    }
                    1. Bonjour didy_gwatinik,

                      Le prototype est : #include <conio.h> et non pas conio.c
                      Essaye de nouveau...
                      1. Salut

                        Revient a la premiere version de ton programme.
                        En effet tu fait des #define qui créent des constantes et tu les utilise comme entier c'est incorrect. Il faut donc déclarer nombreLigne et nombreColonne comme des entiers (int) comme tu l'avais fait au début.
                        De plus tu déclare mal tes tableaux : tu ne peut pas déclarer leur taille avec des int il faut utiliser une constante. Tape plutot : int tab[9][9].

                        Voila dis moi si il reste des erreurs.
                        ++
                        1. Bonjour didy_gwatinik,

                          Voilà le code repris, j'ai trouvé quelque erreurs :
                          Déclaration d'un tableau à 2 dimensions non déclaré : tabcase[][]...
                          Do while(...);

                          Après analyse, j'ai remis int au lieu de #define...

                          Sur la fin, il y a une parenthèse de trop... plus de courage à la localiser...

                          Par contre mon compliateur ne "bronche" plus sauf pour la paranthèse...

                          Un conseil, essaye d'aérer ton code . Saute des lignes...
                          Remarque : Faute de place je n'ai décalé que d'une case ! Normalement j'en mets 3.

                          Mets du commentaire; aujourd'hui tout va bien, mais dans 1 an quand il faudra reprendre le code...

                          ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

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

                          int nbMine=0;
                          int nombreLigne=9;
                          int nombreColonne=9;
                          int i=0, j=0;
                          int tab[9][9];

                          //+++++++++++++++++++++++++++++++++++++++++++++++
                          // Fonction Personaliser
                          //***********************************************
                          void personalise(void)
                          {
                          int Ligne=-1, Colonne=-1;

                          printf("=>Personalisation du jeu<=");
                          while(Ligne<1 || Ligne>10)
                          {
                          puts("\n\nDe quelle longueur voulez vous que votre champ de mine soit? (9 par defaut)");
                          scanf("%d", &tab[nombreLigne]);
                          Ligne=nombreLigne;
                          }
                          while(Colonne<1 || Colonne>10)
                          {
                          puts("\n\nDe quelle largeur voulez vous que votre champ de mine soit? (9 par defaut)");
                          scanf("%d", &tab[nombreColonne]);
                          Colonne=nombreColonne;
                          }
                          do
                          {
                          puts("\n\nCombien de mines voulez vous avoir a desamorcer? (10 par defaut)");
                          scanf("%d", &nbMine);
                          }while(nbMine>nombreLigne*nombreColonne);
                          }

                          //+++++++++++++++++++++++++++++++++++++++
                          //Fonction choisir
                          //+++++++++++++++++++++++++++++++++++++++
                          void choisir (void)
                          {
                          int choix;

                          textcolor(2);
                          printf("Que voulez vous faire?\n\t-1 Commencer a jouer\n\t-2 Personnaliser le jeu\n\t-3 Voir les regles du jeu\n");
                          scanf("%d", &choix);
                          system("cls");
                          switch(choix)
                          {
                          case 1 :
                          {
                          printf("Veuillez entrer votre niveau de jeu : \n\t-1 Debutant\n\t-2 Intermediaire\n\t-3 Expert\n");
                          scanf("%d",&choix);
                          switch(choix)
                          {
                          case 1 :
                          {
                          nombreLigne=9;
                          nombreColonne=9;
                          nbMine=10;
                          }
                          break;
                          case 2 :
                          {
                          nombreLigne=10;
                          nombreColonne=10;
                          nbMine=40;
                          }
                          break;
                          case 3 :
                          {
                          nombreLigne=10;
                          nombreColonne=10;
                          nbMine=60;
                          }
                          break;
                          default : ;
                          }
                          }
                          break;
                          case 2 :
                          personalise ();
                          break;
                          case 3 :
                          printf("=>Les Regles du jeu<=\n\nLe jeu se presente sous la forme d'un tableau de cases a deux dimensions. Certaines cases contiennent des mines. Au depart toutes les cases sont masquees (et on ne voit donc pas les mines). L'objectif est de localiser les mines (le nombre de mines restant a localiser etant donne au joueur). Le joueur peut au choix decouvrir le contenu d'une case, ou la marquer pour signaler la presence d'une mine (c'est son hypothese et le decompte des mines se fixe la dessus). Les cases decouvertes affichent le nombre de mines dans les 8 cases voisines, sauf si la case contient elle meme une mine (auquel cas le joueur meurt et la partie est termine). Si le joueur n'est pas mort, la partie se termine lorsque le joueur a decouvert toutes les cases (sauf celles avec les mines). Son score est le temps mis pour terminer.\n");
                          break;
                          default : ;
                          }
                          }

                          //+++++++++++++++++++++++++++++++++
                          //Fonction Jeu
                          //++++++++++++++++++++++++++++++
                          void jeu ( )
                          {;}

                          //++++++++++++++++++++++++++++++++
                          //Fonction affichage_tableau
                          //+++++++++++++++++++++++++++++++
                          void affichage_tableau (void)
                          {
                          printf(" "); //4 espace
                          for(j=0;j<nombreColonne;j++) //revoir l'initialisation avc la convention
                          {
                          printf("%d ",j);
                          }
                          printf("\n -");
                          for(j=0;j<nombreColonne;j++)
                          {
                          printf("--");
                          }
                          for(i=0;i<nombreLigne;i++)
                          {
                          puts(" ");
                          printf("%d | ",i);
                          for(j=0;j<nombreColonne;j++)
                          {
                          printf("x ",tab[i][j]); // affichage du tableau
                          }
                          }
                          puts("\n");
                          }

                          main(void)
                          {
                          int lignemine,colonnemine,recommencer;
                          int i, j,mine=0,mineAlentour=0,reponse,confirmCase,compteurMine=10,caseDecouverte=0,nbCase=81;

                          do
                          {
                          system("cls");
                          textcolor(4);
                          printf("\n\n\n\n\t\t\t\t===>>>LE DEMINEUR<<===\n\n\n\n");
                          textcolor(2);
                          choisir();
                          nbCase=nombreColonne*nombreLigne;
                          system("pause");
                          system("cls");
                          affichage_tableau( );

                          //Initilisation du tableau avec les mines et les mines alentours
                          srand(time(NULL));
                          for(i=0;i<nombreLigne;i++)
                          {
                          for(j=0;j<nombreColonne;j++)
                          {
                          tab[i][j]=rand( )%2;
                          if ((tab[i][j]>0.5) && (mine<nbMine))
                          {
                          tab[i][j]=9;
                          mine++;
                          }
                          else{tab[i][j]=0;}
                          }
                          }

                          for(i=0;i<nombreLigne;i++)
                          {
                          for(j=0;j<nombreColonne;j++)
                          {
                          if(tab[i][j]!=9)
                          {
                          if (tab[i-1][j+1]==9)
                          mineAlentour++; //Case diagonale haut gauche

                          if (tab[i][j+1]==9)
                          mineAlentour++;//case du haut

                          if (tab[i+1][j+1]==9)
                          mineAlentour++;//Case diagonale haut droite

                          if (tab[i-1][j]==9)
                          mineAlentour++;//CAse de gauche

                          if (tab[i+1][j]==9)
                          mineAlentour++;//Case de droite

                          if (tab[i-1][j-1]==9)
                          mineAlentour++;//case diagonale bas gauche

                          if (tab[i][j-1]==9)
                          mineAlentour++;//case du bas

                          if (tab[i+1][j-1]==9)
                          mineAlentour++;//case diagonale droite bas
                          tab[i][j]=mineAlentour;
                          }
                          mineAlentour=0;
                          }
                          }

                          printf("\n ");
                          for(j=0;j<nombreColonne;j++)
                          {
                          printf("%d ",j);
                          }

                          printf("\n -");
                          for(j=0;j<nombreColonne;j++)
                          {
                          printf("--");
                          }

                          for(i=0;i<nombreLigne;i++)
                          {
                          puts("");
                          printf("%d | ",i);
                          for(j=0;j<nombreColonne;j++)
                          {
                          printf("%d ",tab[i][j]); // affichage du tableau
                          }
                          }

                          //initialisation du tableau d'affichage//
                          for(i=0;i<nombreLigne;i++)
                          {
                          for(j=0;j<nombreColonne;j++)
                          {
                          tab[i][j]=0; //on initialise le tableau a 0 car toutes les cases sont masquées.
                          }
                          }

                          //--------------------Choix de la case-----------------------
                          while(caseDecouverte<=nbCase-nbMine)
                          {
                          while(confirmCase!=1)
                          {
                          i=-1;
                          confirmCase=0;
                          do
                          {
                          puts("\nQuelles sont les coordonnees de la case que vous souhaitez choisir (ligne colonne)?");
                          scanf("%d",&i);
                          scanf("%d",&j);
                          }while(i<0 || i>nombreLigne+1 || j<0 || j>nombreColonne+1);

                          do
                          {
                          printf("Etes vous sur de vouloir choisir cette case? (1) Oui (2) Non\n");
                          scanf("%d", &confirmCase);
                          }while(confirmCase<1 || confirmCase>2);
                          }
                          confirmCase=0;

                          //-------------Choix case marquer ou desamorcer
                          printf("Que voulez vous faire de la case %d %d? La desamorcer (1) ou la marquer (2) en tant que mine?\n", i ,j);
                          scanf("%d",&reponse );//Blinder les saisies
                          system("cls");
                          if(reponse==1 && tab[i][j]!=9)//on affecte a la case une valeur suivant le choix de lutilisateur
                          tab[i][j]=1;
                          else
                          {
                          if(reponse==2)
                          tab[i][j]=2;}

                          if(tab[i][j]!=9 || reponse==2)//simple case
                          {
                          //Affichage du tableau
                          printf(" ");//4 espace

                          for(j=0;j<nombreColonne;j++)
                          {
                          printf("%d ",j);
                          }
                          printf("\n -");

                          for(j=0;j<nombreColonne;j++)
                          {
                          printf("--");
                          }

                          for(i=0;i<nombreLigne;i++)
                          {
                          puts("");
                          printf("%d | ",i);
                          for(j=0;j<nombreColonne;j++)
                          {
                          if (tab[i][j]==1)
                          {
                          textcolor(6);printf("%d " ,tab[i][j]);
                          caseDecouverte++;
                          }

                          if(tab[i][j]==2)
                          {
                          textcolor(8);printf("# ");
                          }

                          if(tab[i][j]==0)
                          {
                          textcolor(10);printf("x ");}
                          textcolor(2);}
                          }
                          }
                          else
                          {
                          if(tab[i][j]==9)//c'est une mine alors partie perdue
                          puts("Vous avez perdu! Partie terminee");

                          //Affichage du tableau de début
                          printf(" ");//4 espace

                          for(j=0;j<nombreColonne;j++)
                          {
                          printf("%d ",j);
                          }

                          printf("\n -");

                          for(j=0;j<nombreColonne;j++)
                          {
                          printf("--");
                          }

                          for(i=0;i<nombreLigne;i++)
                          {
                          puts("");
                          printf("%d | ",i);

                          for(j=0;j<nombreColonne;j++)
                          {
                          if(tab[i][j]==9)
                          {
                          textcolor(4);printf("* ");}
                          else
                          {
                          textcolor(2);
                          printf("%d ",tab[i][j]);
                          }
                          textcolor(2);
                          }
                          }
                          caseDecouverte=80;//pour sortir de la boucle
                          }

                          system("pause");
                          //system("cls");
                          // }
                          // GAGNER
                          if(caseDecouverte>nbCase-nbMine && caseDecouverte!=80)
                          {
                          system("cls");
                          printf("\a\a\n\nFELICITATIONS !!!, vous avez gagne");

                          //Affichage du tableau de début
                          printf(" ");//4 espace
                          for(j=0;j<nombreColonne;j++)
                          {
                          puts("");
                          printf("%d ",j);
                          }

                          printf("\n -");
                          for(j=0;j<nombreColonne;j++)
                          {
                          printf("--");
                          }

                          for(i=0;i<nombreLigne;i++)
                          {
                          puts("");
                          printf("%d | ",i);

                          for(j=0;j<nombreColonne;j++)
                          {
                          if(tab[i][j]==9)
                          {
                          printf("* ");}
                          else
                          {
                          printf("%d ",tab[i][j]);
                          }
                          }
                          }
                          }

                          textcolor(2);
                          printf("\nVoulez vous (1) recommencer (2) quitter\n");
                          scanf("%d", &recommencer);
                          }while(recommencer!=2);

                          getch();
                          return 0;
                          }
                          • 1
                          • 2