Rechercher : dans
Par :

Problem declaration variable globale

Dernière réponse le 12 jan 2008 à 17:25:10 didy_gwatinik, le 12 jan 2008 à 13:44:47 
 Signaler ce message aux modérateurs

Bonjour,
Je commence toujours avec les fonctions et j'ai un probleme quand je déclare un tableau en tant que variable globale, j'obtiens le message : variable-size type declared outside of any function
Voila une partie de mon code :
#include<stdio.h>
#include<conio.c>
#include<stdlib.h>
#include<time.h>
int nombreLigne=9,nombreColonne=9,nbMine=10, i, j,tab[nombreLigne][nombreColonne];

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],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;}
}
}

A l'aide!!! J'utilise Dev C++.

Configuration: Windows XP
Internet Explorer 6.0

Meilleures réponses pour « Problem declaration variable globale » dans :
[Shell] Tester une variable numérique VoirTester une variable numérique    Préambule Dans un environnement "shell", les variables sont, par défaut, de type "chaîne de caractères". De ce fait il n'est pas possible de déclarer une variable de type "entier" (enfin, ceci n'est pas tout à...
Que fait un fork() ? Voir...ou le petit fork() illustré.... Introduction Lancement du père Le fork Maîtriser le fil d'exécution du père et celui du fils Les variables et les descripteurs de fichiers La synchronisation La fin Notes et...
Les variables en C++ VoirLes variables en C++ 1. Les différents types de variables 1.1 bool 1.2 char 1.3 unsigned short int 1.4 short int 1.5 unsigned long int 1.6 long int 1.7 int (16 bits) 1.8 int (32 bits) 1.9 unsigned int (16 bits) 1.10 unsigned int (32...
Javascript - Les variables VoirLe concept de variable Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. En Javascript, les noms de variables peuvent être aussi long que l'on désire,...
Langage C - Les variables VoirLe concept de variable Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. Les variables en langage C sont typées, c'est-à-dire que les données contenues dans...
Java: les variables VoirLe concept de variable Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. Les variables en langage Java sont typées, c'est-à-dire que les données contenues dans...

1

fiddy, le 12 jan 2008 à 13:51:04

Normal.
Soit tu effectues un malloc.
Soit tout simplement, tu écris :

#define nombreLigne 9 à la place de int nombreLigne=9;
#define nombreColonne 9 à la place de int nombreColonne=9;

Cordialement
Google is your friend

Répondre à fiddy

2

didy_gwatinik, le 12 jan 2008 à 13:55:40

J'ai essayé la deuxième solution mais j'obtiens l'erreur suivante : non l-value in unary '&', je ne sais pas ce qu'est un maloc

Répondre à didy_gwatinik

3

grad, le 12 jan 2008 à 13:56:17

Je ne connais pas en C++ ou en C mais je détecte quelques erreurs :
1-Tu as déclaré le tableau avec le INT , c'est un tableau pas un ENTIER
2-Il faut déclarer le tableau tout seul en précisant le type (tableau d'entiers , de réels ...)
3-Tu parles de fonctions,je ne vois aucune fonction dans ton programme
Pour te documenter ==> clique ici

Répondre à grad

4

fiddy, le 12 jan 2008 à 14:38:00

Salut

Post moi le début de ton fichier, avec la solution par #define, que je vois si tu as bien mis comme j'ai dit.

Cordialement
Google is your friend

Répondre à fiddy

5

didy_gwatinik, le 12 jan 2008 à 14:43:44

Voila :

#include<stdio.h>
#include<conio.c>
#include<stdlib.h>
#include<time.h>
#define nombreLigne 9
#define nombreColonne 9
int nbMine=10, i, j,tab[nombreLigne][nombreColonne];
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));
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

}
}

Répondre à didy_gwatinik

6

didy_gwatinik, le 12 jan 2008 à 15:49:58

Ya un probleme dans ma declaration?

Répondre à didy_gwatinik

7

fiddy, le 12 jan 2008 à 16:02:55

Salut,
Utilise les balises "

" et "
" pour insérer ton code, on y verra beaucoup plus clair.

Sinon, il y avait d'autres erreurs.
#include <conio.c> au lieu de conio.h
Des accolades manquantes à la fin de la fonction main, un while manquant.

Je te poste donc une correction qui devrait marcher. A toi de mettre la bonne condition dans le while que j'ai rajouté.


#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<time.h>
#define nombreLigne 9
#define nombreColonne 9
int nbMine=10, i, j,tab[nombreLigne][nombreColonne];
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));
    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

	  }
      }
  
  }while(1);
}

Google is your friend

Répondre à fiddy

8

 didy_gwatinik, le 12 jan 2008 à 17:25:10

J'ai toujours un probleme avec la même expression, je ne poste pas mon code en entier car il est long. Quand on met #define nombreLigne 9 et #define nombreColonne 9 dans le code on peut les modifier? Je pense que l'erreur vient de là.

#include<stdio.h>
#include<conio.c>
#include<stdlib.h>
#include<time.h>
#define nombreLigne 9
#define nombreColonne 9
int nbMine=10, i, j,tab[nombreLigne][nombreColonne];
void personalise( )
{
    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 ( ) 
{
     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 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));
           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    ");
...

Répondre à didy_gwatinik
Collection CommentÇaMarche.net