En C comment copier un enregistrement dans un tableau de char
themahg
Messages postés4Date d'inscriptiondimanche 4 septembre 2005StatutMembreDernière intervention11 février 2006
-
11 févr. 2006 à 00:08
cs_bouba
Messages postés518Date d'inscriptiondimanche 2 décembre 2001StatutMembreDernière intervention10 novembre 2007
-
13 févr. 2006 à 17:15
ThemahG, Japon toujours!
Aidez moi svp, j'ai un probleme dans mon
prog, g n'arrive pas à copier dans un tableau à 2 dimension
l'enregistrement d'une structure. Voici le code du prog:
#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>
typedef struct membre {
char categorie;
char nom[20];
char prenom[20];
char adrese[60];
int niveau;
int cotisation;
}MEMBRE;
int encod_memb(membre *,int );
void affich_memb(membre *,int);
char* cree_tableau(membre*,char[][41] ,int);
void aff_index(char[][41],int [],int);
int* indexation(char[][41],int[] ,int,int);
int tri_insertion(int[],int);
void main()
{
//declaration et initialisation
MEMBRE karate[10],*pkarate;
int nmembre=0,i=0,a;
int nadulte=0;
int nenfant=0;
int indexe[10],*pindexe;
char data[10][41],*pdata;
pkarate=&karate[0];
pdata=&data[0][0];
pindexe=&indexe[0];
printf("\n\tGESTION D'UN CLUB DE KARATE \n");
printf("\n\t=========================== \n");
do
{
a=encod_memb(&karate[i],i); /* Encoder jusqu'a ce que la fct<-0 et i=10 */
pdata=cree_tableau(pkarate,data,nmembre);
if(a!=0)
{
i++;
nmembre=i;
if(pkarate->categorie=='A')
{
nadulte=nadulte+1;
}
else
if(pkarate->categorie=='E')
{
nenfant=nenfant+1;
}
}
}
while(nmembre<10 && a!=0);
{
}
/* Mis a jour du nbre d'element
nenfant=*pnenfant; /* Mis a jour du nbre d'enfant
nadulte=*pnadulte; /* Mis a jour du nbre d'adulte */
affich_memb(pkarate,nmembre);
pindexe=indexation(data,indexe,nadulte,nenfant);
aff_index(data,indexe,nmembre);
printf("\n");
printf("\n");
}
// ___fct encod_memb____________
int encod_memb(MEMBRE *pkarate ,int i)
{
int a,c;
printf("\n \n\tEncoder le membre n° %d ",i+1);
printf("\n\tEncoder LA CATEGORIE du membre n° %d:",i+1);
fflush(stdin);
pkarate->categorie=toupper(getchar());
// verifier le nbre d'enfant ou adulte
if(pkarate->categorie=='\n')
{
a=0;
return a;
}
printf("\n\tEncoder LE NOM du membre n° %d:",i+1);
fflush(stdin);
gets(pkarate->nom);
printf("\n\tEncoder LE PRENOM du membre n° %d:",i+1);
fflush(stdin);
gets(pkarate->prenom);
printf("\n\tEncoder L'ADDRESSE du membre n° %d:",i+1);
fflush(stdin);
gets(pkarate->adrese);
printf("\n\tEncoder LE NIVEAU du membre ( 1,2,3 ? ) n° %d:",i+1);
cs_bouba
Messages postés518Date d'inscriptiondimanche 2 décembre 2001StatutMembreDernière intervention10 novembre 20073 11 févr. 2006 à 00:26
Tu colles 200 lignes de code alors que ta question concerne seulement un dixaine de celles-ci. Perso ça ne me donne pas trop envi de chercher ou est le problème dans ton prog !!! Passes plutôt seulement la partie de code ou tu essais de faire la copie.
cs_bouba
Messages postés518Date d'inscriptiondimanche 2 décembre 2001StatutMembreDernière intervention10 novembre 20073 13 févr. 2006 à 17:15
Hum, c'est bizar ton code.
// sauvegarde dans un vecteur temporaire
1. for(i=0;i<nmembre;i++){
2. tmp[i]=pkarate->categorie;
3. strncpy(&tmp[i+1],pkarate->nom,strlen(pkarate->nom+1));
4. strcat(&tmp[strlen(pkarate->nom)],pkarate->prenom);
5.}
ligne 1, supposons nmembre=3
Au premier passage de boucle (OK, pas tout à fait car strlen(pkarate->nom+1) = 19, je pense que tu voulais plutôt faire strlen(pkarate->nom) + 1)
Bref au second passage
tmp[1] = pkarate->categorie ???? c'est moi ou c'est pas ce que tu voulais faire ?
Imaginons que tu as 2 membres
categorie1 = a
nom1 = pierre
prenom1 = ttt
categorie2 = a
nom2 = paul
prenom2 = xxx
au premier passage dans tmp on a
apierrttt
au final dans tmp tu as donc
aapaxxxtt
Es-tu sûr que c'est bien ce que tu voulez faire ?? La sauvagarde dans un "vecteur temporaire" n'est vraiment pas utile, pourquoi ne pas copier directement les données ?