Declaration variable

Declaration variable - C - Programmation

Marsh Posté le 12-01-2008 à 18:13:10    

Voila je débute avec les fonctions en C et j'ai un probleme, j'essaie de déclarer une variable globale mais j'obtiens une erreur. Je vous poste une partie de mon code pour que vous puissez m'aider. J'ai mis l'erreur en gras c'est l même erreur pour le nombreColonne

Code :
  1. #include<stdio.h>
  2. #include<conio.c>
  3. #include<stdlib.h>
  4. #include<time.h>
  5. int nbMine=10, i, j,tab[nombreLigne][nombreColonne];
  6. void personalise( )
  7. {
  8.     int Ligne=-1, Colonne=-1;
  9.                        printf("=>Personalisation du jeu<=" );
  10.                        while(Ligne<1 || Ligne>10)
  11.                        {puts("\n\nDe quelle longueur voulez vous que votre champ de mine soit? (9 par defaut)" );
  12.                        scanf("%d", &nombreLigne);//nombreLigne was not declared in this scope
  13.                        Ligne=nombreLigne;}
  14.                        while(Colonne<1 || Colonne>10)
  15.                        {puts("\n\nDe quelle largeur voulez vous que votre champ de mine soit? (9 par defaut)" );
  16.                        scanf("%d", &nombreColonne);//non-lvalue in unary '&'
  17.                        Colonne=nombreColonne;}
  18.                        do{
  19.                        puts("\n\nCombien de mines voulez vous avoir a desamorcer? (10 par defaut)" );
  20.                        scanf("%d", &nbMine);
  21.                        }while(nbMine>nombreLigne*nombreColonne);
  22. }
  23. void choisir ( )
  24. {
  25.      int choix;
  26.      
  27.           textcolor(2);
  28.           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" );
  29.           scanf("%d", &choix);
  30.           system("cls" );
  31.           switch(choix)
  32.           {
  33.                        case 1 :
  34.                             {
  35.                             printf("Veuillez entrer votre niveau de jeu : \n\t-1 Debutant\n\t-2 Intermediaire\n\t-3 Expert\n" );
  36.                             scanf("%d",&choix);
  37.                             switch(choix)
  38.                             {
  39.                                          case 1 :
  40.                                               {
  41.                                                   nombreLigne=9;
  42.                                                   nombreColonne=9;
  43.                                                   nbMine=10;
  44.                                               }
  45.                                               break;
  46.                                          case 2 :
  47.                                               {
  48.                                                     nombreLigne=10;
  49.                                                     nombreColonne=10;
  50.                                                     nbMine=40;
  51.                                               }
  52.                                                    break;
  53.                                          case 3 :
  54.                                               {
  55.                                                    nombreLigne=10;
  56.                                                    nombreColonne=10;
  57.                                                    nbMine=60;
  58.                                               }
  59.                                                             break;
  60.                                                         default : ;
  61.                             }
  62.                             }
  63.                             break;
  64.                        case 2 :
  65.                             personalise ();
  66.                                  break;
  67.                        case 3 :
  68.                                       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" );
  69.                                       break;
  70.                        default : ;
  71.           }
  72.           }
  73. void jeu ( )
  74. {
  75.              
  76. void affichage_tableau ( )
  77. {
  78.      printf("    " );//4 espace
  79.      for(j=0;j<nombreColonne;j++)//revoir l'initialisation avc la convention
  80.           {
  81.                           printf("%d ",j);
  82.           }
  83.           printf("\n  -" );
  84.           for(j=0;j<nombreColonne;j++)
  85.           {
  86.           printf("--" );
  87.           }
  88.           for(i=0;i<nombreLigne;i++)
  89.           {
  90.                           puts(" " );
  91.                           printf("%d | ",i);
  92.                           for(j=0;j<nombreColonne;j++)
  93.                           {
  94.                                           printf("x ",tab[i][j]); // affichage du tableau
  95.                           }
  96.           }
  97.           puts("\n" );
  98. }
  99.              
  100.          
  101. main(void)
  102. {
  103.           int lignemine,colonnemine,recommencer,tabcase[nombreLigne][nombreColonne], i, j,mine=0,mineAlentour=0,reponse,confirmCase,compteurMine=10,caseDecouverte=0,nbCase=81;
  104.           do{
  105.           system("cls" );
  106.           textcolor(4);
  107.           printf("\n\n\n\n\t\t\t\t===>>>LE DEMINEUR<<===\n\n\n\n" );
  108.           textcolor(2);
  109.           choisir( );
  110.           nbCase=nombreColonne*nombreLigne;
  111.           system("pause" );
  112.           system("cls" );   
  113.           affichage_tableau( );

Reply

Marsh Posté le 12-01-2008 à 18:13:10   

Reply

Marsh Posté le 12-01-2008 à 18:38:46    

ba nombreligne et nombrecolonne sont pas définie c'est tout. Faudra apprendre à lire :o

Reply

Marsh Posté le 12-01-2008 à 18:47:05    

je sais lire merci mais si je rajoute sur la ligne de declaration par exemple nombreLigne=9 et nombreColonne=9 ca me mets : "variable-size type declared outside of any function"
Quand on initialise des valeurs globales on ne peut pas les modifier ultérieurement?

Reply

Marsh Posté le 12-01-2008 à 18:51:33    

Trop de choses immondes dans ce programme.
 

didy_gwatinik a écrit :

#include<conio.c>


 
conio.h
 

didy_gwatinik a écrit :

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


 
Les variables globales, c'est mal.
Il n'y a que dans certains cas particuliers qu'elles sont utiles, mais en gros, dans la grosse majorité des cas, c'est d'une immonde laideur. Comme ici.
Et puisqu'on en est là, comme l'a fait remarquer Joel F, nombreLigne et nombreColonne n'existent pas à cet endroit du programme (le compilateur lit ton code de bas en haut).
 

didy_gwatinik a écrit :

void personalise( )


 
void personalise(void)
 

didy_gwatinik a écrit :

scanf("%d", &nombreLigne);//nombreLigne was not declared in this scope


 
scanf() utilisé comme ça, çaÿ mal. Il faudrait pendre haut et court tous ces "professeurs" qui continuent d'enseigner cette fonction avancée à des débutants.
Utilise fgets() + une fonction de conversion adéquate (strtol, strtod, etc).
 

didy_gwatinik a écrit :

void jeu ( )
{
               
void affichage_tableau ( )


 
Il manque une accolade fermante.
               


 
main() retourne explicitement un int, il n'y a que deux prototypes de main() valides :
 
int main(void)
et
int main(int argc, char **argv)
 
 

didy_gwatinik a écrit :

         affichage_tableau( );[/cpp]


Il manque la fin du programme, qui doit se terminer par un "return 0;" et de l'accolade fermante de la fonction main().

Reply

Marsh Posté le 12-01-2008 à 18:52:05    

didy_gwatinik a écrit :

je sais lire merci


 
Si j'avais lu ça plutôt, je n'aurais pas écrit mon post précédent. Tu peux aller mourir la bouche ouverte.

Reply

Marsh Posté le 12-01-2008 à 18:56:21    

J'ai bien mis je vous poste une partie de mon programme il y a encore du code après et c'est pas la peine d'etre si désagréable!!!! conio.c ca existe je vous ferai remarquer!

Reply

Marsh Posté le 12-01-2008 à 18:58:11    

putain, mais tu sors de quelle ecole ou on apprends à inclure des .C !

Reply

Marsh Posté le 12-01-2008 à 18:59:07    

pourquoi j'ai déjà fait des programmes avec et ca marche très bien

Reply

Marsh Posté le 12-01-2008 à 19:00:50    

didy_gwatinik a écrit :

J'ai bien mis je vous poste une partie de mon programme il y a encore du code après et c'est pas la peine d'etre si désagréable!!!!


 
Je ne crois pas avoir été désagréable.
 

didy_gwatinik a écrit :

conio.c ca existe je vous ferai remarquer!


 
Il y a plusieurs entités distinctes en langage C :

  • le code source (*.c)
  • l'en-tête (*.h)
  • le fichier compilé (*.o)
  • la bibliothèque statique (*.lib, *.a, dépend de l'OS)
  • la bibliothèque dynamique (*.dll, *.so, dépend de l'OS)
  • le binaire exécutable


L'instruction #include permet d'inclure une en-tête à ton programme, l'en-tête contenant les définitions de fonctions/variables/structures/enum/etc. d'une bibliothèque.
 
Donc, #include <machin.c> c'est laid, et vraisemblablement faux.

Reply

Marsh Posté le 12-01-2008 à 19:03:05    

hé bien je débute je ne le savais pas tout simplement, je l'apprendrai après.certains codes marchent comme ca sous devcpp donc je ne me suis pas poser plus de question

Reply

Marsh Posté le 12-01-2008 à 19:03:05   

Reply

Marsh Posté le 14-01-2008 à 19:03:25    

didy_gwatinik a écrit :

hé bien je débute je ne le savais pas tout simplement, je l'apprendrai après.certains codes marchent comme ca sous devcpp donc je ne me suis pas poser plus de question


Il serait bon au contraire surtout en phase d'apprentissage, que tu te poses des questions. C'est vraiment le moment.
 
Il faut savoir que le langage C permet de faire beaucoup de choses dont la plupart sont des Mauvaises Pratiques ou des erreurs potentielles. Il est donc important d'apprendre quelles sont les Bonnes Pratiques.
 
Voici, par exemple, un article qui explique comment organiser son code correctement.
 
http://mapage.noos.fr/emdel/codage.htm


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 14-01-2008 à 19:14:52    

Houuuu le vilain code ! :lol:
 
Pour revenir à ta question, tu ne peux pas déclarer de tableau avec des dimensions variables, tu n'as droit qu'aux constantes quand tu déclares un tableau.
C'est "int tab[10][25]"; et rien d'autre. (enfin si des constantes de précompilation)
En gros tu prévois d'avoir un tableau qui fait 10x10, tu déclares "int tab[65000][65000]", comme ça t'es tranquille. :whistle:

Message cité 1 fois
Message édité par czh le 14-01-2008 à 19:16:34
Reply

Marsh Posté le 14-01-2008 à 19:26:49    

czh a écrit :

tu déclares "int tab[65000][65000]", comme ça t'es tranquille. :whistle:


 
ouais, enfin, avant de venir dire des bétises, il serait de bon ton de savoir de quoi on parle :o

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed