Tableau de structure
SOUMbelgique
Messages postés
18
Statut
Membre
-
fiddy Messages postés 11653 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11653 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
voilà mon problème.
j'ai un pointeur de pointeur pptab de type structure.
enco **pptab;
j'ai deux tableaux à gerer en dynamique avec ce pointeur de pointeur
donc j'utilise un realloc
le premier tableau contient des valeurs simples et le second contient les structures.
puis je faire comme cela?
pptab=(enco**) realloc(pptab,x*sizeof(enco*)); // pour le tableau de structures
pptab[i]=(enco*) realloc(pptab,x*sizeof(int)); // pour mon tableau d'entier
merci à vous.
voilà mon problème.
j'ai un pointeur de pointeur pptab de type structure.
enco **pptab;
j'ai deux tableaux à gerer en dynamique avec ce pointeur de pointeur
donc j'utilise un realloc
le premier tableau contient des valeurs simples et le second contient les structures.
puis je faire comme cela?
pptab=(enco**) realloc(pptab,x*sizeof(enco*)); // pour le tableau de structures
pptab[i]=(enco*) realloc(pptab,x*sizeof(int)); // pour mon tableau d'entier
merci à vous.
A voir également:
- Tableau de structure
- Tableau word - Guide
- Trier un tableau excel - Guide
- Tableau ascii - Guide
- Imprimer un tableau excel - Guide
- Tableau croisé dynamique - Guide
6 réponses
Salut,
Pourquoi utiliser realloc ? Lors de la première allocation, utilise plutôt malloc ou calloc.
Ensuite, tu dois faire une boucloe for pour initialiser chacun des éléments du tableau.
Cdlt
Pourquoi utiliser realloc ? Lors de la première allocation, utilise plutôt malloc ou calloc.
Ensuite, tu dois faire une boucloe for pour initialiser chacun des éléments du tableau.
for(i=0;i<x;i++) enco[i]=malloc(...);
Cdlt
non je peux utliser le realloc si j'initialise mon pointeur de pointeur à 0.
voilà mon programme pour plus d'info.
#include <stdio.h>
#include <conio.h>
#include <process.h>
#include <alloc.h>
struct ident
{
char nom[20+1] ;
char prenom[20+1] ;
int age;
};
struct coord
{
char rue[25+1];
int cp,no;
};
typedef struct
{
struct ident identite;
struct coord adresse;
int nocli;
}client;
void affi(client** pptab,int*ptab,int z );
void main(void)
{
int x=0,cptclient=0,i=0;
char c;
client **pptab=0;
int *ptab=0;
clrscr();
do
{
c=getch();
if(c=='t' || c=='T')
{
i=0;
printf("\nfirme num: %d\n\n",x+1);
if(!(ptab=(int*) realloc(ptab,(x+1)*sizeof(int)))) exit(0);
if(!(pptab=(client**)realloc(pptab,(x+1)*sizeof(int*)))) exit(0);
x++;
}
if(c=='e' || c=='E')
{
i++;
cptclient++;
ptab[x-1]=cptclient;
if(!(pptab[x-1]=(client*)realloc(pptab[x-1],i*sizeof(client)))) exit(0);
printf("CLIENT No %d\n",i);
(pptab[x-1][i-1]).nocli=x;
printf ("Entrez le nom: ");
gets ((pptab[x-1][i-1]).identite.nom);
printf ("Entrez le prenom: ");
gets((pptab[x-1][i-1]).identite.prenom);
printf("Entrez l'age: ");
scanf ("%d",&(pptab[x-1][i-1]).identite.age); getchar();
printf ("Entrez la rue: ");
gets ((pptab[x-1][i-1]).adresse.rue);
printf ("Entrez le No: ");
scanf ("%d",&(pptab[x-1][i-1]).adresse.no); getchar();
printf("Entrez le CP: ");
scanf ("%d",&(pptab[x-1][i-1]).adresse.cp); getchar();
}
}
while(c!='s' && c!='S');
clrscr();
affi(pptab, ptab,x);
getch();
}
void affi(client**pptab,int*ptab,int x)
{
int i,r;
for(i=0;i<x;i++)
{
printf("firme numero:%d pour %d de clients",(i+1),ptab[i]);
for(r=0;r<ptab[i];r++)
{
printf("\nCLIENT No %d\n",pptab[i][r].nocli);
printf("\nNo client: %d",pptab[i][r].nocli);
printf ("\nVoici le nom: %s",pptab[i][r].identite.nom);
printf("\nVoici le prenom: %s",pptab[i][r].identite.prenom);
printf ("\nVoici l'age: %d",pptab[i][r].identite.age);
printf ("\nAdresse: rue %s No %d, CP%d",pptab[i][r].adresse.rue,pptab[i][r].adresse.no,pptab[i][r].adresse.cp);
}
}
getch();
}
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
mais ma question est que:
si j'ai un pointeur de pointeur de type structure
est ce que je peux le realloué avec un entier
pptab=(enco**) realloc(pptab,x*sizeof(int*));
c'est le sizeof(int*) qui me gratte. est ce que je peux faire cela?
si j'ai un pointeur de pointeur de type structure
est ce que je peux le realloué avec un entier
pptab=(enco**) realloc(pptab,x*sizeof(int*));
c'est le sizeof(int*) qui me gratte. est ce que je peux faire cela?
Salut,
Vu ton programme, je comprends mieux l'utilisation de realloc ;)
Sinon, voici une version corrigée de ton programme. Il doit rester encore des bugs, et je n'ai pas été jusqu'au bout des corrections. Par exemple, tu as utilisé gets au lieu de fgets. Gets ne doit pas être utilisé car c'est dangereux.
Donc je te laisse corriger jusqu'au bout, j'ai fait le premier remplacement de gets contre fgets pour t'en inspirer.
Sinon, évite d'utiliser conio.h et process.h (inutile dans ton cas) car ce n'est pas standard, donc pas portable.
Attention, lorsque l'utilisateur appuie sur 'e' avant d'appuyer sur 't', il y a une jolie erreur de segmentation.
Et enfin, c'est mieux de renvoyer un int dans le main.
Vu ton programme, je comprends mieux l'utilisation de realloc ;)
Sinon, voici une version corrigée de ton programme. Il doit rester encore des bugs, et je n'ai pas été jusqu'au bout des corrections. Par exemple, tu as utilisé gets au lieu de fgets. Gets ne doit pas être utilisé car c'est dangereux.
Donc je te laisse corriger jusqu'au bout, j'ai fait le premier remplacement de gets contre fgets pour t'en inspirer.
Sinon, évite d'utiliser conio.h et process.h (inutile dans ton cas) car ce n'est pas standard, donc pas portable.
Attention, lorsque l'utilisateur appuie sur 'e' avant d'appuyer sur 't', il y a une jolie erreur de segmentation.
Et enfin, c'est mieux de renvoyer un int dans le main.
#include <stdio.h>
#include <stdlib.h>
struct ident
{
char nom[20+1] ;
char prenom[20+1] ;
int age;
};
struct coord
{
char rue[25+1];
int cp,no;
};
typedef struct
{
struct ident identite;
struct coord adresse;
int nocli;
}client;
void affi(client** pptab,int*ptab,int z );
int main(void)
{
int x=0,cptclient=0,i=0;
char c[3];
client **pptab=0;
int *ptab=0;
do
{
puts("choix : ");
fgets(c,sizeof(c),stdin);
if(c[0]=='t' || c[0]=='T')
{
i=0;
printf("\nfirme num: %d\n\n",x+1);
if(!(ptab=(int*) realloc(ptab,(x+1)*sizeof(int)))) exit(0);
if(!(pptab=(client**)realloc(pptab,(x+1)*sizeof(int*)))) exit(0);
x++;
}
if(c[0]=='e' || c[0]=='E')
{
i++;
cptclient++;
ptab[x-1]=cptclient;
if(!(pptab[x-1]=(client*)realloc(pptab[x-1],i*sizeof(client)))) exit(0);
printf("CLIENT No %d\n",i);
(pptab[x-1][i-1]).nocli=x;
printf ("Entrez le nom: ");
fgets ((pptab[x-1][i-1]).identite.nom,sizeof(pptab[x-1][i-1].identite.nom),stdin);
printf ("Entrez le prenom: ");
gets((pptab[x-1][i-1]).identite.prenom);
printf("Entrez l'age: ");
scanf ("%d",&(pptab[x-1][i-1]).identite.age); getchar();
printf ("Entrez la rue: ");
gets ((pptab[x-1][i-1]).adresse.rue);
printf ("Entrez le No: ");
scanf ("%d",&(pptab[x-1][i-1]).adresse.no); getchar();
printf("Entrez le CP: ");
scanf ("%d",&(pptab[x-1][i-1]).adresse.cp); getchar();
}
}
while(c[0]!='s' && c[0]!='S');
affi(pptab, ptab,x);
return 0;
}
void affi(client**pptab,int*ptab,int x)
{
int i,r;
for(i=0;i<x;i++)
{
printf("firme numero:%d pour %d de clients",(i+1),ptab[i]);
for(r=0;r<ptab[i];r++)
{
printf("\nCLIENT No %d\n",pptab[i][r].nocli);
printf("\nNo client: %d",pptab[i][r].nocli);
printf ("\nVoici le nom: %s",pptab[i][r].identite.nom);
printf("\nVoici le prenom: %s",pptab[i][r].identite.prenom);
printf ("\nVoici l'age: %d",pptab[i][r].identite.age);
printf ("\nAdresse: rue %s No %d, CP%d",pptab[i][r].adresse.rue,pptab[i][r].adresse.no,pptab[i][r].adresse.cp);
}
}
}