fonction de structure [C] - C - Programmation
Marsh Posté le 22-04-2007 à 21:39:18
gregory8500 a écrit :
|
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 "->"
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 .
Marsh Posté le 22-04-2007 à 19:18:55
salut, je cherche a mettre une structure en fonction dans ce programme
#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