Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1100 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Declaration variable

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Declaration variable

n°1670155
didy_gwati​nik
Rien n'est impossible
Posté le 12-01-2008 à 18:13:10  profilanswer
 

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( );

mood
Publicité
Posté le 12-01-2008 à 18:13:10  profilanswer
 

n°1670175
Joel F
Real men use unique_ptr
Posté le 12-01-2008 à 18:38:46  profilanswer
 

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

n°1670182
didy_gwati​nik
Rien n'est impossible
Posté le 12-01-2008 à 18:47:05  profilanswer
 

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?

n°1670186
Elmoricq
Modérateur
Posté le 12-01-2008 à 18:51:33  profilanswer
 

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().

n°1670187
Elmoricq
Modérateur
Posté le 12-01-2008 à 18:52:05  profilanswer
 

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.

n°1670188
didy_gwati​nik
Rien n'est impossible
Posté le 12-01-2008 à 18:56:21  profilanswer
 

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!

n°1670190
Joel F
Real men use unique_ptr
Posté le 12-01-2008 à 18:58:11  profilanswer
 

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

n°1670191
didy_gwati​nik
Rien n'est impossible
Posté le 12-01-2008 à 18:59:07  profilanswer
 

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

n°1670192
Elmoricq
Modérateur
Posté le 12-01-2008 à 19:00:50  profilanswer
 

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.

n°1670193
didy_gwati​nik
Rien n'est impossible
Posté le 12-01-2008 à 19:03:05  profilanswer
 

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

mood
Publicité
Posté le 12-01-2008 à 19:03:05  profilanswer
 

n°1671057
Emmanuel D​elahaye
C is a sharp tool
Posté le 14-01-2008 à 19:03:25  profilanswer
 

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/
n°1671064
czh
Posté le 14-01-2008 à 19:14:52  profilanswer
 

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
n°1671074
Joel F
Real men use unique_ptr
Posté le 14-01-2008 à 19:26:49  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Declaration variable

 

Sujets relatifs
[updated]- [c] centraliser declaration de variable.Convertir une chaine en déclaration de variable
pb de declaration d'une variable UInt64ComboBox et déclaration de variable...
declaration de variableprobleme de declaration de variable
[Oracle] Déclaration de variable "Table of" ??déclaration variable, chaine de caractère
[PHP] + [JS] Concaténé pour la déclaration d'une variable JSBest practice Java : déclaration d'1 variable (locale) dans une boucle
Plus de sujets relatifs à : Declaration variable


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR