IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Problème de déclaration en C


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2014
    Messages : 10
    Par défaut Problème de déclaration en C
    Bonjour à tous,

    suite à un projet que je dois rendre dans le cadre des mes études, je suis amené à créer une sorte de gestion de cinéma en c.

    J'ai cependant un problème dans mon code mais je ne trouve pas de solutions ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    #include<stdio.h>
    #include<conio-bis.h>
    #include<string.h>
    #include<windows.h>
     
    int main ()
    {
       void menu ();          
      menu ();           
     
    getch ();
    return 0;
    }
     
    void menu ()
    {
     int flag=1;
    int choix ;
    void tarif ();
    void affiche ();
    void sorties ();
    void admin (); // mot de passe = admin 
     
    textcolor(WHITE);
    printf("\n				   |--------------------------------------------------------------------------------------------------------------------------|");
    printf("\n				   |                                                                                                                          |");
    printf("\n				   |   |------------------------------------------------------------------------------------------------------------------|   |");
    printf("\n				   |   |                                                                                                                  |   |");
    printf("\n				   |   |     CCCCCCCCCCCCC    IIIIIIIIIIIII    NNNN         NNN    EEEEEEEEEEEEE    MMM             MMM    AAAAAAAAAAAAA  |   |");
    printf("\n				   |   |    CCCCCCCCC         IIIIIIIIIIIII    NNN NN       NNN    EEEEEEEEEEEEE    MMMM           MMMM    AAAAAAAAAAAAA  |   |");
    printf("\n				   |   |   CCCCCCCCC          IIIIIIIIIIIII    NNN  NN      NNN    EEEE             MMM MM       MM MMM    AAA       AAA  |   |");
    printf("\n				   |   |  CCCCCCC                 IIII         NNN   NN     NNN    EEEE             MMM  MM     MM  MMM    AAA       AAA  |   |");
    printf("\n		 		   |   |  CCCCCC                  IIII         NNN    NN    NNN    EEEEEEEEEEEEE    MMM   MM   MM   MMM    AAAAAAAAAAAAA  |   |");
    printf("\n		 		   |   |  CCCCCCC                 IIII         NNN     NN   NNN    EEEE             MMM    MM MM    MMM    AAAAAAAAAAAAA  |   |");
    printf("\n				   |   |   CCCCCCCCC          IIIIIIIIIIIII    NNN      NN  NNN    EEEE             MMM      M      MMM    AAA       AAA  |   |");
    printf("\n				   |   |    CCCCCCCCC         IIIIIIIIIIIII    NNN       NN NNN    EEEEEEEEEEEEE    MMM             MMM    AAA       AAA  |   |");
    printf("\n				   |   |     CCCCCCCCCCCCC    IIIIIIIIIIIII    NNN         NNNN    EEEEEEEEEEEEE    MMM             MMM    AAA       AAA  |   |");
    printf("\n				   |   |                                                                                                                  |   |");
    printf("\n				   |   |------------------------------------------------------------------------------------------------------------------|   |");
    printf("\n				   |                                                                                                                          |");              
    printf("\n				   |--------------------------------------------------------------------------------------------------------------------------|");
    printf("\n\n\n");
    printf("\n                                                                                     Bienvenue au CineMaverick                                \n\n");
    printf("\n                                                                                     1  :  Films a l ' affiche                                ");
    printf("\n                                                                                     2  :  Consulter les tarifs                               ");
    printf("\n                                                                                     3  :  Films bientot disponibles                          ");
    printf("\n                                                                                     4  :  Modifier fichier central ( ! admin )               ");
    printf("\n                                                                                     5  :  Quitter le CineMaverick                            ");
     
     
    do
      {
        printf("\n\n                                                                                     Quel est votre choix ?");
        scanf("%d",&choix);
     
             if (choix >0 && choix <6 )
             {
     
             	 switch (choix)
                  {
                    case 1 : flag=1;affiche();break;
                    case 2 : flag=1;tarif();break; 
    		        case 3 : flag=1;sorties();break;
    		        case 4 : flag=1;admin();break;
                    case 5 : flag=1;printf("\n                                                                                Vous avez choisi le numero 5 : Quitter le CineMaverick\n\n                                                                                Merci de votre viste et a bientot chez CineMaverick");exit(0); 
                  }
            }
             else
      	     printf("\n                                                                                     Vous avez saisi un mauvais numero, veuillez recommencer s'il vous plait");
    	     flag=0; 
      }
      while (flag!=1);
    }
     
    void affiche ()
    {
    	struct film 
        { char titre[20],acteurs[20];
          int duree[20],places;
          short supp;
        };
        struct film a;
      FILE *f;
      int n,nb;
      f=fopen("d:/film.dat","rb");
      if(f)
      { fseek(f,0L,SEEK_END);//on va a la fin du fichier
        n=ftell(f);//on prend la position actuelle 
        nb=n/sizeof(a);//on divise par la taille de la structure pour obtenir le nombre de records
        printf("\nil y a %d films enregistres dans le fichier",nb);
        rewind(f);//on revient au debut pour tout afficher 
        fread(&a,sizeof(a),1,f);
        while(!feof(f))
        { if(a.supp==0)
          {printf("\n TITRE : %s \nACTEURS : %s \nDUREE : %d \nPLACES DISPOS : %d ",a.titre,a.acteurs,a.duree,a.places);
          } 
          fread(&a,sizeof(a),1,f);
     
        }
        fclose(f);
      }
      else
        printf("\nle fichier n'existe pas");	
    }
     
     
    void tarif ()
    {
    	struct film 
        { char titre[20],acteurs[20];
          int duree[20],places;
          short supp;
        };
        struct film a;
        char *title;
        int code,x,nombre,pla,prix;
        nombre=a.places;
        FILE *f;
     
      printf ("\n                                                                                     Bienvenue dans la consultation des tarifs de CineMaverick ! ");
      printf ("\n\n                                                                                     Pour quel film voulez vous reserver vos places ?");
      scanf("%s",&title);
      f=fopen("d:/film.dat","rb");
      if(f)
      { x=fread(&a,sizeof(a),1,f);
        printf("\n%d",x);
        while(!feof(f))
        { if(a.supp==0)
          {if(strcmp(a.titre,title)==0)
            {
    		  printf("\n                                       TITRE : %s \n                                 ACTEURS : %s \n                                    DUREE : %d \n                         PLACES DISPOS : %d ",a.titre,a.acteurs,a.duree,a.places);
     
                printf("\n                                                                                 Combien de places voulez vous ?");
                scanf("%d",&pla);
                if (nombre-pla<0)
            	     printf("\n                                                                            Il n'y a plus assez de places restantes");
               else
    		   {
               nombre=nombre-pla;
               prix=pla*10;
               printf("\n                                                                                  Il y a : %d , places restantes",nombre);
               printf("\n                                                                                  Vous devez payer : %d",prix);
               a.places=nombre;
     
     
               }
     
            }
     
           else
           printf("\n                                                                                       erreur, ce film n'existe pas!");
      }
          x=fread(&a,sizeof(a),1,f);
          printf("\n%d",x);  
        }
        fclose(f);
      }
      else
        printf("\nerreur, le fichier n'existe pas ");
     
     
    }
     
     
    void sorties ()
    {
    		struct sorties 
        { char titre[20],acteurs[20];
          int duree[20];
          short supp;
        };
        struct sorties a;
      FILE *f;
      int n,nb;
      f=fopen("d:/sorties.dat","rb");
      if(f)
      { fseek(f,0L,SEEK_END);//on va a la fin du fichier
        n=ftell(f);//on prend la position actuelle 
        nb=n/sizeof(a);//on divise par la taille de la structure pour obtenir le nombre de records
        printf("\nil y a %d films enregistres dans le fichier",nb);
        rewind(f);//on revient au debut pour tout afficher 
        fread(&a,sizeof(a),1,f);
        while(!feof(f))
        { if(a.supp==0)
          {printf("\n TITRE : %s \nACTEURS : %s \nDUREE : %d ",a.titre,a.acteurs,a.duree);
          } 
          fread(&a,sizeof(a),1,f);
     
        }
        fclose(f);
      }
      else
        printf("\nle fichier n'existe pas");
    }
     
     
     
    void admin ()  // mot de passe = admin
    {
    	char pass[7]={"admin"};
    	char mdp[7];
    	int choix,flag,i;
    	char menu[6][250]={ "\n                                                                                     1. Ajout","\n                                                                                     2. Affichage","\n                                                                                     3. Modification","\n                                                                                     4. Suppression logique ","\n                                                                                     5. Fin"};
    	void affiche ();
    	void ajout ();
    	void modif();
    	void supp ();
    	printf("\n                                                                                     Vous voulez modifier le fichier central, veuillez vous connecter . ");
     
    	do 
    	{
    		printf("\n\n                                                                                     Entrez le mot de passe ");
    	    scanf("%s",&mdp);
     
    	    if (strcmp(mdp,pass)==0)
    	    {
     
    	      printf("\n                                                                                     Vous etes bien connecte?");
    	      flag=1;
    	      for(i=0;i<6;i++)
              printf("\n%s",menu[i]);
              do
             {
              printf("\n\n                                                                                     Quel est votre choix ?");
              scanf("%d",&choix);
     
             if (choix >0 && choix <6 )
             {
     
             	 switch (choix)
                  {
                    case 1 : flag=1;ajout();break;
                    case 2 : flag=1;affiche();break; 
    		        case 3 : flag=1;modif();break;
    		        case 4 : flag=1;supp();break;
                    case 5 : flag=1;printf("\n                                                                                     Vous avez choisi le numero 5 : Quitter le menu admin\n\n");exit(0); 
                  }
             }
               else
      	       printf("\n                                                                                     Vous avez saisi un mauvais numero, veuillez recommencer s'il vous plait");
    	       flag=0; 
            }
             while (flag!=1);
     
    	    }
    	      else
    	      {
    	      printf("\n                                                                                     Echec de l'autentification , veuillez reesayer ");
    	      flag=0;
    	      }
        }
        while(flag!=1);
    }
     
     
    void ajout ()
    {
     struct film 
        { char titre[20],acteurs[20];
          int duree[20],places;
          short supp;
        };
    	struct film a;     
        FILE *f;
        f=fopen("d:/film.dat","ab");
         if(f)
        {
    	  a=saisie();
          fwrite(&a,sizeof(a),1,f);
          fclose(f);
        } 
       else
         printf("\nerreur lors de l'ajout d'un film ");
    }
     
    struct film saisie()
    {    
        struct film tmp;
        printf("\ntitre ? ");
        scanf("%s",tmp.titre);
        printf("\nacteurs ? ");
        scanf("%s",tmp.acteurs);
        printf("\nduree ? ");
        scanf("%d",tmp.duree);
        printf("\nnombres places ? ");
        scanf("%d",tmp.places);
        tmp.supp=0;
        return tmp;
    }

    Voici ce que le compilateur m'indique :

    D:\projetc\projetfinal.cpp In function 'void ajout()':
    268 13 D:\projetc\projetfinal.cpp [Error] 'saisie' was not declared in this scope
    D:\projetc\projetfinal.cpp At global scope:
    276 23 D:\projetc\projetfinal.cpp [Error] variable 'film saisie' has initializer but incomplete type
    276 20 D:\projetc\projetfinal.cpp [Error] 'tmp' was not declared in this scope
    277 1 D:\projetc\projetfinal.cpp [Error] expected ',' or ';' before '{' token



    Comment remédier à cela , car d'apres moi j'ai bien déclaré ma fonction saisie qui est de type : struct film...


    En vous remerciant d'avance ,

    bonne journée.
    Cordialement Maverick

  2. #2
    Membre Expert
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    872
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 872
    Par défaut
    Les compilateurs C/C++ sont un peu cons dans ces cas-la. En gros, il commence par le debut de ton fichier, lit les includes et ensuite commence a lire ton code. Quand il arrive a l'appel de ta structure saisie, il ne la connait pas car elle n'est pas declaree avant. Tu peux resoudre ce probleme en la declarant donc avant ton main. C'est d'ailleurs pareil pour tes fonctions :

    - Tu ecris la fonction avant son appel dans une autre fonction.
    - Tu declares son prototype avant son appel dans une autre fonction comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void mafonction();
     
    int main() {
      ...
    }

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2014
    Messages : 10
    Par défaut Merci
    Merci beaucoup pour ton aide, j'y avais pensé mais cependant mon professeur a dit qu'il ne voulait pas de variables "globales" .

    En même temps si ça ne fonctionne pas autrement je n'ai pas trop le choix.. enfin

    Merci bien

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Attention à un point.

    Le code proposé par emperio ne contient pas de variables globales. Un int, un float, un char[] sont des variables. Une fonction n'est pas (vraiment) une variable en C. Son code veut simplement dire "monsieur le compilateur, je vais utiliser une fonction, elle s'appelle comme-ci et s'utilise comme ça. Si tu la rencontres, ne la jette pas comme une malpropre". Cependant, cela ne crée pas la fonction.

    Pour ce qui est des structures, il faut distinguer deux choses :
    1. la structure elle-même : struct mon_type nom; (comme on pourrait avoir int a
    2. la définition du type structure (avec un typedef)

    Le 2e point ne crée aucune structure, elle explique juste au compilateur qu'il existe un nouveau et que lorsqu'on créera des variables de ce type, il faut qu'il s'en souvienne. Si tu as une structure (une variable) globale, tu peux l'éviter en changeant tes fonctions pour qu'elles prennent une structure en paramètre. Tu crées alors la structure dans le main et que tu appelles ces fonctions avec cette variable en paramètre.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Inclusion de classes / problème de déclaration
    Par scal-80 dans le forum C++
    Réponses: 5
    Dernier message: 21/06/2006, 16h28
  2. Réponses: 2
    Dernier message: 27/05/2006, 12h13
  3. problème de déclaration
    Par dirty_boy dans le forum C
    Réponses: 2
    Dernier message: 16/09/2005, 11h56
  4. Réponses: 11
    Dernier message: 29/04/2005, 19h45
  5. Problème de déclaration de segment avec use32
    Par le mage tophinus dans le forum Assembleur
    Réponses: 2
    Dernier message: 10/01/2003, 10h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo