[C] fonction de structure

fonction de structure [C] - C - Programmation

Marsh Posté le 22-04-2007 à 19:18:55    

salut, je cherche a mettre une structure  en fonction dans ce programme

Citation :

#include <stdio.h>
#include <conio.h>
#define KEY_UP 72
#define KEY_DOWN 80
//void ajoutraid(struct  calendrier*);
void main()
{
int i,C,x,y,w,z,col=10,lin=5;
//calendrier
struct calendrier
 {
   char jour[5];
   char lieu [10];
   int chaman;
   int chasseur;
   int demoniste;
   int druide;
   int guerrier;
   int mage;
   int paladin;
   int pretre;
   int voleur;
   }a;
//raid  membres actif
struct raid
 {
   char nom [10];
   char classe [10];
   int rotation;
   }r;
//la reserve pour el raid journalier
struct reserve
 {
   char nom [10];
   char classe [10];
   int rotation;
   }re;
//liste des membres
struct membre
    {
      char nom [10];
      int niveau;
      int rotation;
      char lundi;
      char mardi;
      char jeudi;
      char classe[10];
      }CL;
 char tab[4][30]={"calendrier","raid","membres","quitter"};
 
do
{
//menu deroulant
  clrscr();
  gotoxy(20,15);
  for(z=0;z<4;z++)
    {gotoxy(col,lin+z);printf("%s",tab[z]);
    }
  z=0;
 
  do
  {gotoxy(col,lin+z);
   highvideo();
    cprintf("%s",tab[z]);
    normvideo();
    w=getch();
    if(w==0)
    {w=getch();
      if(w==KEY_DOWN)
      { gotoxy(col,lin+z);
        cprintf("%s", tab[z]);
        z++;
        if(z==4)
          z=0;
 
      }
      if(w==KEY_UP)
      { gotoxy(col,lin+z);
        cprintf("%s",tab[z]);
        z--;
        if(z==-1) z=3;
      }
     }
  }
  while(w!=13);
  gotoxy(col,20);
  printf("\nvous avez choisi l'option %s",tab[z]);
  C=z+1;
//entrer dans le fichier calendrier
 
 
 
if(C==1)
 {
   printf("\n entrez votre choix" );
   printf("\n 1)ajouter raid\n 2)modifier raid\n 3) supprimer raid\n4)quitter" );
   do
    {
      scanf(" %d",&x);
      }
   while(x<1||x>4);
  do
  {
 //ajouter les 3raid de la semaine
  if(x==1)
     {
 
         FILE *f;
         f=fopen("calendrier.dat","w" );
         for(i=0;i<3;i++);
         {printf("\ entrez le raid %d",i+1);
          //ajoutraid(&a);
          fwrite(&a,sizeof(struct calendrier),1,f);
         }
         fclose(f);
         }
 //modifier un raid de la semaine
  if(x==2)
     {
 
         FILE *f;
         f=fopen("calendrier.dat","a" );
         printf("\n quel raid voulez vous changer (en chiffre)" );
         do
          {
            scanf(" %d",&y);
            }
          while(y<1||y>3);
          fseek(f,0,0);
          fseek(f,(y-1)* sizeof(struct calendrier),0);
          fread(&a,sizeof(struct calendrier),1,f);
          //lecturecalendrier(&a);
          //ajoutraid(&a);
          fwrite(&a,sizeof(struct calendrier),1,f);
          fclose(f);
 
         }
  if(x==3)
     {
      // supprimerraid(&a);
     }
 }
   while(x!=4);
   }
 
}
while(C!=4);
}
/*
void ajoutraid(struct calendrier* a)
 {printf("\n entrez  jour" );
   scanf(" %s",a.jour);
   printf(" \n entrez le lieu" );
   scanf(" %s",a.lieu);
   printf("\n entrez le nombre de chaman" );
   scanf(" %d",&a.chaman);
   printf("\n entrez le nombre de chasseur" );
   scanf(" %d",&a.chasseur);
   printf("\n entrez le nombre de demoniste" );
   scanf(" %d",&a.demoniste);
   printf("\n entrez le nombre de druide" );
   scanf(" %d",&a.druide);
   printf("\n entrez le nombre de guerrier" );
   scanf(" %d",&a.guerrier);
   printf("\n entrez le nombre de mage" );
   scanf(" %d",&a.mage);
   printf("\n entrez le nombre de paladin" );
   scanf(" %d",&a.paladin);
   printf("\n entrez le nombre de pretre" );
   scanf(" %d",&a.pretre);
   printf("\n entrez le nombre de voleur" );
   scanf(" %d",&a.voleur);
   }
*/


 
mais il met comme erreur a plusieur reprise structure required on left side . or *
cannot convert calendrier* to calendrier*
type mistmatch  in parameter 1in call to ajoutraid(calendrier*)
 
merci davance de votre aide

Reply

Marsh Posté le 22-04-2007 à 19:18:55   

Reply

Marsh Posté le 22-04-2007 à 21:39:18    

gregory8500 a écrit :


/*
void ajoutraid(struct calendrier* a)
 {printf("\n entrez  jour" );
   scanf(" %s",a.jour);
   printf(" \n entrez le lieu" );
   scanf(" %s",a.lieu);
   printf("\n entrez le nombre de chaman" );
   scanf(" %d",&a.chaman);
   printf("\n entrez le nombre de chasseur" );
   scanf(" %d",&a.chasseur);
   printf("\n entrez le nombre de demoniste" );
   scanf(" %d",&a.demoniste);
   printf("\n entrez le nombre de druide" );
   scanf(" %d",&a.druide);
   printf("\n entrez le nombre de guerrier" );
   scanf(" %d",&a.guerrier);
   printf("\n entrez le nombre de mage" );
   scanf(" %d",&a.mage);
   printf("\n entrez le nombre de paladin" );
   scanf(" %d",&a.paladin);
   printf("\n entrez le nombre de pretre" );
   scanf(" %d",&a.pretre);
   printf("\n entrez le nombre de voleur" );
   scanf(" %d",&a.voleur);
   }
*/


 
mais il met comme erreur a plusieur reprise structure required on left side . or *
cannot convert calendrier* to calendrier*
type mistmatch  in parameter 1in call to ajoutraid(calendrier*)


Si tu ouvrais un peu tes bouquins de C, tu saurais que puisque "a" est un pointeur sur une structure, l'accès à la structure se fait via "*a". Et donc l'accès aux membres se fait via "(*a).membre".
 
Cette écriture étant un peu lourde, il a été créé l'opérateur "->" permettant de travailler avec un pointeur sur une structure. Donc l'écriture ci-dessus est remplaçable par "a->membre". Et bien évidemment tu rajoutes un "&" devant dès que tu veux accéder à l'adresse de ce membre.
 
Autrement dit, tu remplaces dans ta fonction tous tes "." par des "->"


Message édité par Sve@r le 22-04-2007 à 21:42:48

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 26-04-2007 à 23:39:08    

merci de ta reponse, cela m a bien aider :)
le pire c'etait tout con mais bon pas bon de plancher sur un projet a 2h du matin .

Reply

Sujets relatifs:

Leave a Replay

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