Variable globale

Résolu
didy_gwatinik Messages postés 352 Date d'inscription   Statut Membre Dernière intervention   -  
lenrok Messages postés 1437 Date d'inscription   Statut Membre Dernière intervention   -
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

lenrok Messages postés 1437 Date d'inscription   Statut Membre Dernière intervention   376
 
Bonjour didy_gwatinik,

Où as-tu déclaré ces variables globales ?
0
didy_gwatinik Messages postés 352 Date d'inscription   Statut Membre Dernière intervention   80
 
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?
0
lenrok Messages postés 1437 Date d'inscription   Statut Membre Dernière intervention   376
 
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...
0
didy_gwatinik Messages postés 352 Date d'inscription   Statut Membre Dernière intervention   80
 
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 `&'
0

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

Posez votre question
didy_gwatinik Messages postés 352 Date d'inscription   Statut Membre Dernière intervention   80
 
Je racourcirai les noms aussi...
0
didy_gwatinik Messages postés 352 Date d'inscription   Statut Membre Dernière intervention   80
 
A l'AIDE Y'A QUELQU'UN????
0
lenrok Messages postés 1437 Date d'inscription   Statut Membre Dernière intervention   376
 
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 ?

0
didy_gwatinik Messages postés 352 Date d'inscription   Statut Membre Dernière intervention   80
 
Je ne sais pas comment on se met en mode pas à pas et la touche F1 ne donne rien
0
lenrok Messages postés 1437 Date d'inscription   Statut Membre Dernière intervention   376
 
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 ?
0
didy_gwatinik Messages postés 352 Date d'inscription   Statut Membre Dernière intervention   80
 
J'utilise Dev c++
0
lenrok Messages postés 1437 Date d'inscription   Statut Membre Dernière intervention   376
 
Bonjour didy_gwatinik,

Désolé, je ne connais pas cet outil de développement.
Mais, va voir sur ce site : https://www.developpez.net/forums/
Dans C et C++, il y a DEV C++. Tu auras peut-être plus de chance... Bon courage....
0
didy_gwatinik Messages postés 352 Date d'inscription   Statut Membre Dernière intervention   80
 
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
0
lenrok Messages postés 1437 Date d'inscription   Statut Membre Dernière intervention   376
 
Bonjour didy_gwatinik,

On peut toujours essayer. Mais comment faire pour rapatrier ton listing ?
0
didy_gwatinik Messages postés 352 Date d'inscription   Statut Membre Dernière intervention   80
 
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;
}
0
didy_gwatinik Messages postés 352 Date d'inscription   Statut Membre Dernière intervention   80
 
tout est passé?
0
lenrok Messages postés 1437 Date d'inscription   Statut Membre Dernière intervention   376
 
Bonjour didy_gwatinik,

Le prototype est : #include <conio.h> et non pas conio.c
Essaye de nouveau...
0
didy_gwatinik Messages postés 352 Date d'inscription   Statut Membre Dernière intervention   80
 
j'obtiens le même erreur
0
damlegone32 Messages postés 74 Date d'inscription   Statut Membre Dernière intervention   29
 
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.
++
0
lenrok Messages postés 1437 Date d'inscription   Statut Membre Dernière intervention   376
 
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;
}
0
didy_gwatinik Messages postés 352 Date d'inscription   Statut Membre Dernière intervention   80
 
je vais tester tout ca
merci
0