Le structure et tableau de caractere
j'ai un probleme pour copier un enregistrement dans une ligne d'un tableu de caractere pouvez vous m'aider svp, voici le code de mon 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);
fflush(stdin);
scanf("%d",&c);
pkarate->niveau=c;
// verification de la cotisation
if(pkarate->categorie=='A')
{
if( pkarate->niveau==1)
{
pkarate->cotisation=20;
}
else
if( pkarate->niveau==2)
{
pkarate->cotisation=22;
}
else
{
pkarate->cotisation=24;
}
}
else
if(pkarate->categorie=='E' )
{
if( pkarate->niveau==1)
{
pkarate->cotisation=10;
}
else
if( pkarate->niveau==2)
{
pkarate->cotisation=12;
}
else
{
pkarate->cotisation=14;
}
}
//verification de la touche Enter
if(pkarate->categorie!='\n')
{
a=1;
}
else
{
a=0;
}
return a;
}
////////////////////////////////////////////////////// creation du tableau
char* cree_tableau(MEMBRE *pkarate, char data[][41],int nmembre)
{
int i,j,ncomax=41;
char tmp[41];
// sauvegarde dans un vecteur temporaire
for(i=0;i<nmembre;i++)
{
tmp[i]=pkarate->categorie;
strncpy(&tmp[i+1],pkarate->nom,strlen(pkarate->nom+1));
strcat(&tmp[strlen(pkarate->nom)],pkarate->prenom);
}
for(j=0;j<nmembre;j++)
{
printf(" %c %s ",tmp[j],tmp[j]);
}
//*******************************
for(i=0;i<nmembre;i++)
{
for(j=0;j<ncomax;j++)
{
strcpy((&data[i][j]),&tmp[i]);
}
}
return &data[0][0];
}
//////////////////////////////// INDEXATION/////////////////////////////////////
int* indexation(char data[][41],int indexe[],int nadulte,int nenfant)
{
int i,j,n;
n=nadulte+nenfant;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(data[i][j]>=data[i+1][j])
{
if(strcmp(&data[i][j+1],&data[i+1][j+1])<=0)
{
indexe[i]=i;
}
else
{
indexe[i]=i+1;
}
indexe[i]=(indexe,nadulte);
}
else
{
if(strcmp(&data[i][j+1],&data[i+1][j+1])<=0)
{
indexe[nenfant]=i;
}
else
{
indexe[nenfant]=i+1;
}
indexe[i]=(indexe,nenfant);
}
}
}
return indexe;
}
////////////////////////////////// affiche index /////////////////////////////////
void aff_index(char data[][41],int indexe[],int nmembre)
{
int i,j;
for(i=0;i<nmembre;i++)
{
for(j=0;j<1;j++)
{
printf(" %c %s %s ",data,data[indexe[i]][j]);
}
}
}
////////////////////////////////////////////////////////////////////////////////////////////
void affich_memb( membre *pkarate,int nmembre)
{
int i=0;
while(i<nmembre)
{
printf("\n %c ",pkarate->categorie);
printf("\n %s ",pkarate->nom);
printf("\n %s ",pkarate->prenom);
printf("\n %s ",pkarate->adrese);
printf("\n %d ",pkarate->niveau);
printf("\n %d ",pkarate->cotisation);
i++;pkarate++;
}
}
//=================================================================================================
int tri_insertion(int indexe[],int nmembre)
{
int i,j=0,res;
for(j=1;j<nmembre;j++)
{
i=j-1;
res=indexe[j];
while(indexe[i]>res)
{
indexe[i+1]=indexe[i];
i=i-1;
}
indexe[i+1]=res;
return indexe[i];
}
return indexe[j];
}
#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);
fflush(stdin);
scanf("%d",&c);
pkarate->niveau=c;
// verification de la cotisation
if(pkarate->categorie=='A')
{
if( pkarate->niveau==1)
{
pkarate->cotisation=20;
}
else
if( pkarate->niveau==2)
{
pkarate->cotisation=22;
}
else
{
pkarate->cotisation=24;
}
}
else
if(pkarate->categorie=='E' )
{
if( pkarate->niveau==1)
{
pkarate->cotisation=10;
}
else
if( pkarate->niveau==2)
{
pkarate->cotisation=12;
}
else
{
pkarate->cotisation=14;
}
}
//verification de la touche Enter
if(pkarate->categorie!='\n')
{
a=1;
}
else
{
a=0;
}
return a;
}
////////////////////////////////////////////////////// creation du tableau
char* cree_tableau(MEMBRE *pkarate, char data[][41],int nmembre)
{
int i,j,ncomax=41;
char tmp[41];
// sauvegarde dans un vecteur temporaire
for(i=0;i<nmembre;i++)
{
tmp[i]=pkarate->categorie;
strncpy(&tmp[i+1],pkarate->nom,strlen(pkarate->nom+1));
strcat(&tmp[strlen(pkarate->nom)],pkarate->prenom);
}
for(j=0;j<nmembre;j++)
{
printf(" %c %s ",tmp[j],tmp[j]);
}
//*******************************
for(i=0;i<nmembre;i++)
{
for(j=0;j<ncomax;j++)
{
strcpy((&data[i][j]),&tmp[i]);
}
}
return &data[0][0];
}
//////////////////////////////// INDEXATION/////////////////////////////////////
int* indexation(char data[][41],int indexe[],int nadulte,int nenfant)
{
int i,j,n;
n=nadulte+nenfant;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(data[i][j]>=data[i+1][j])
{
if(strcmp(&data[i][j+1],&data[i+1][j+1])<=0)
{
indexe[i]=i;
}
else
{
indexe[i]=i+1;
}
indexe[i]=(indexe,nadulte);
}
else
{
if(strcmp(&data[i][j+1],&data[i+1][j+1])<=0)
{
indexe[nenfant]=i;
}
else
{
indexe[nenfant]=i+1;
}
indexe[i]=(indexe,nenfant);
}
}
}
return indexe;
}
////////////////////////////////// affiche index /////////////////////////////////
void aff_index(char data[][41],int indexe[],int nmembre)
{
int i,j;
for(i=0;i<nmembre;i++)
{
for(j=0;j<1;j++)
{
printf(" %c %s %s ",data,data[indexe[i]][j]);
}
}
}
////////////////////////////////////////////////////////////////////////////////////////////
void affich_memb( membre *pkarate,int nmembre)
{
int i=0;
while(i<nmembre)
{
printf("\n %c ",pkarate->categorie);
printf("\n %s ",pkarate->nom);
printf("\n %s ",pkarate->prenom);
printf("\n %s ",pkarate->adrese);
printf("\n %d ",pkarate->niveau);
printf("\n %d ",pkarate->cotisation);
i++;pkarate++;
}
}
//=================================================================================================
int tri_insertion(int indexe[],int nmembre)
{
int i,j=0,res;
for(j=1;j<nmembre;j++)
{
i=j-1;
res=indexe[j];
while(indexe[i]>res)
{
indexe[i+1]=indexe[i];
i=i-1;
}
indexe[i+1]=res;
return indexe[i];
}
return indexe[j];
}
A voir également:
- Le structure et tableau de caractere
- Tableau word - Guide
- Caractère spéciaux - Guide
- Caractere speciaux - Guide
- Caractère ascii - Guide
- Trier un tableau excel - Guide
3 réponses
Ben déjà tu pourrait commencer par mettre ton code entre deux balises code (cf bouton au dessus de la boîte de saisie) et ensuite préciser quel est le problème exact (ce que tu observes, ce que tu veux faire).
Bonne chance
Bonne chance
g rajoute ici la partit du code qui ne tourne pas là ou g un probleme; pour copier l'enregistrement dans un tableua à 2 dimmension, c'est la fct cree_tableau.
char* cree_tableau(MEMBRE *pkarate, char data[][41],int nmembre)
{
int i,j,ncomax=41;
char tmp[41];
// sauvegarde dans un vecteur temporaire
for(i=0;i<nmembre;i++)
{
tmp[i]=pkarate->categorie;
strncpy(&tmp[i+1],pkarate->nom,strlen(pkarate->nom+1));
strcat(&tmp[strlen(pkarate->nom)],pkarate->prenom);
}
for(j=0;j<nmembre;j++)
{
printf(" %c %s ",tmp[j],tmp[j]);
}
//*******************************
for(i=0;i<nmembre;i++)
{
for(j=0;j<ncomax;j++)
{
strcpy((&data[i][j]),&tmp[i]);
}
}
return &data[0][0];
}
char* cree_tableau(MEMBRE *pkarate, char data[][41],int nmembre)
{
int i,j,ncomax=41;
char tmp[41];
// sauvegarde dans un vecteur temporaire
for(i=0;i<nmembre;i++)
{
tmp[i]=pkarate->categorie;
strncpy(&tmp[i+1],pkarate->nom,strlen(pkarate->nom+1));
strcat(&tmp[strlen(pkarate->nom)],pkarate->prenom);
}
for(j=0;j<nmembre;j++)
{
printf(" %c %s ",tmp[j],tmp[j]);
}
//*******************************
for(i=0;i<nmembre;i++)
{
for(j=0;j<ncomax;j++)
{
strcpy((&data[i][j]),&tmp[i]);
}
}
return &data[0][0];
}
Il y a de grosses incohérences sur les types dans ce que tu ecrit. Je pense que tu n'as pas très bien saisi la notion de pointeur et de tableau de caractère, ou même ce que faisaient les fonctions strcpy & co.
Par exemple tu fais :
où tmp est un tampon (donc une chaîne de caractère), et où tmp[i] est le ième caractère du tampon. Ce que tu écris signifie recopie les strlen(pkarate->nom+1) premiers caractères de pkarate->nom à partir du (i+1)ème caractère de tmp.
Dis-moi exactement à quoi correspondent les paramètres et ce que tu veux en afire et on corrigera tout ça ;-) Dans un premier jet tu peux aussi consulter ce que font les différentes fonctions de string.h si tu es sous linux en tapant daans une console :
Tu peux aussi retrouver les page de man sur google. Par ailleurs utilise les balises < code > ..... ton code ...... < /code > autour de tes sections de code pour que ce soit plus lisible, à l'aide du bouton de mise en forme code, juste au dessus de la boîte ou tu saisis tes messages.
Bonne chance
Par exemple tu fais :
strncpy(&tmp[i+1],pkarate->nom,strlen(pkarate->nom+1));
où tmp est un tampon (donc une chaîne de caractère), et où tmp[i] est le ième caractère du tampon. Ce que tu écris signifie recopie les strlen(pkarate->nom+1) premiers caractères de pkarate->nom à partir du (i+1)ème caractère de tmp.
Dis-moi exactement à quoi correspondent les paramètres et ce que tu veux en afire et on corrigera tout ça ;-) Dans un premier jet tu peux aussi consulter ce que font les différentes fonctions de string.h si tu es sous linux en tapant daans une console :
man strncpy man strcat man strcpy
Tu peux aussi retrouver les page de man sur google. Par ailleurs utilise les balises < code > ..... ton code ...... < /code > autour de tes sections de code pour que ce soit plus lisible, à l'aide du bouton de mise en forme code, juste au dessus de la boîte ou tu saisis tes messages.
Bonne chance