[C] Liste chainée dans liste chainée.
Résolu
jerémiethe7
Messages postés
153
Statut
Membre
-
jerémiethe7 Messages postés 153 Statut Membre -
jerémiethe7 Messages postés 153 Statut Membre -
Bonjour,
j'ai une liste chainée de contacts (nom+prénom+tel+mail). Pour chaque contacts, je souhaiterait créer une liste chainée à l'intérieur de celle çi. Mon problème est que je n'arrive pas à mettre NULL dans les (et non la) liste chainée imbriquée.
Voilà ce que j'ai pour l'instant :
//structure stockage Mail (le message)
typedef struct {
char SMS[tailleSMS+1],date[150],horloge[128]; // on rajoute toujours +1 pour avoir la place pour le "\0"
}Sms;
///////////////////////////////////////////////////////////////////////////////////////////////////
//structure liste chainée (donnée + pointeur)
typedef struct liste_sms{
Sms UnSMS;
liste_sms *p_suivant;
}liste_sms;
///////////////////////////////////////////////////////////////////////////////////////////////////
//structure stockage contact (les données)
typedef struct {
char numerotel[T+1]; // on rajoute toujours +1 pour avoir la place pour le "\0"
char name[N+1], pren[N+1],adrmail[M+1];
liste_sms UnSMS;
}Contact;
///////////////////////////////////////////////////////////////////////////////////////////////////
//structure liste chain?e (donnée + pointeur)
typedef struct fiche{
Contact UnContact;
fiche *p_suivant;
}fiche;
///////////////////////////////////////////////////////////////////////////////////////////////////
voilà donc ensuite j'essaye d'initialiser les pointeurs de type liste_mail par NULL.
Dans mon main(), je déclare *p-liste de type fiche, je rempli tous les "jetons" de type Contact exepté liste_mail, que je ne touche pas encore.
Puis j'envoie p_liste (qui pointe sur la tête de la liste chainée c'est certain) vers une fonction, qui renvoie p_liste vers une autre fonction (sans y toucher).Voiçi l'appel depuis de main() :
envoyerSMS(p_liste,nom_a_supprimer,prenom_a_supprimer,tel_a_supprimer,presence_contact);
// elle renvoie p_liste à Ecrire SMS
Puis voici ma fonction Ecrire_SMS :
void EcrireSMS(char *nomSMS, char *prenomSMS,char *telSMS,char *mailSMS,fiche *p_liste,int nombre_contact)
{
FILE* listeSMS = NULL;
char lettreSMS,SMS[tailleSMS+1],horloge[128],date[150];
int i=0,fin=0;
fiche *ptr=p_liste;
_tzset();
_strtime(horloge);
time_t time_of_day; //valeur contenant le temps écoulé depuis le 01/01/1970
time_of_day = time( NULL ); //récupérer le temps passé
strftime(date,150,"%Y/%m/%d",localtime( &time_of_day ) ); //inscrire dans la chaîne buffer notre string telle que nous la voulons
listeSMS=fopen("SMS.txt","w+");
system("cls");
printf("Entrez votre SMS (160 caractères au maximun)\n");
while (lettreSMS!=13&&i<tailleSMS)
{
lettreSMS=getch();
printf("%c",lettreSMS);
SMS[i]=lettreSMS;
i++;
}SMS[i-1]='\0';
while (fin==0) // C'EST ICI QUE J'ESSAIE DE L'INITIALISER
{
ptr->UnContact.UnSMS.p_suivant=NULL;
if(ptr->p_suivant==NULL)
fin=1;
else
ptr=ptr->p_suivant;
} // apparement j'ai essayer de faire printf("%s",ptr->UnContact.UnSMS.p_suivant); ça me met null. ok
if (listeSMS) // ICI J'AIMERAI CREER UN JETON DE TYPE LISTE_SMS mais mon pointeur ptr ne pointe plus sur le même endroit et donc je ne sais pas comment ré-atteindre le bon endroit
{
printf(listeSMS,"%s|%s|%s|%s|%s|%s|%s|\n",nomSMS,prenomSMS,telSMS,mailSMS,date,horloge,SMS);
fclose(listeSMS);
}
}
J'aimerai créer un jeton de la manière suivante :
liste_sms* nouveau=(liste_sms*)malloc(sizeof(liste_sms)); // on crée un nouveau jeton de type liste_sms
creation_jetonSMS(nouveau,date,horloge,SMS);
(*nouveau).p_suivant=(*p_liste).UnContact.UnSMS.
(*p_liste).UnContact.UnSMS.p_suivant=nouveau;
mais bon je ne sais pas si c'est avec p_liste que je doit le faire.
Merci et si vous avez des questions, n'hésitez pas je reveindrait régulièrement pour regarder vos commentaires.
+++
j'ai une liste chainée de contacts (nom+prénom+tel+mail). Pour chaque contacts, je souhaiterait créer une liste chainée à l'intérieur de celle çi. Mon problème est que je n'arrive pas à mettre NULL dans les (et non la) liste chainée imbriquée.
Voilà ce que j'ai pour l'instant :
//structure stockage Mail (le message)
typedef struct {
char SMS[tailleSMS+1],date[150],horloge[128]; // on rajoute toujours +1 pour avoir la place pour le "\0"
}Sms;
///////////////////////////////////////////////////////////////////////////////////////////////////
//structure liste chainée (donnée + pointeur)
typedef struct liste_sms{
Sms UnSMS;
liste_sms *p_suivant;
}liste_sms;
///////////////////////////////////////////////////////////////////////////////////////////////////
//structure stockage contact (les données)
typedef struct {
char numerotel[T+1]; // on rajoute toujours +1 pour avoir la place pour le "\0"
char name[N+1], pren[N+1],adrmail[M+1];
liste_sms UnSMS;
}Contact;
///////////////////////////////////////////////////////////////////////////////////////////////////
//structure liste chain?e (donnée + pointeur)
typedef struct fiche{
Contact UnContact;
fiche *p_suivant;
}fiche;
///////////////////////////////////////////////////////////////////////////////////////////////////
voilà donc ensuite j'essaye d'initialiser les pointeurs de type liste_mail par NULL.
Dans mon main(), je déclare *p-liste de type fiche, je rempli tous les "jetons" de type Contact exepté liste_mail, que je ne touche pas encore.
Puis j'envoie p_liste (qui pointe sur la tête de la liste chainée c'est certain) vers une fonction, qui renvoie p_liste vers une autre fonction (sans y toucher).Voiçi l'appel depuis de main() :
envoyerSMS(p_liste,nom_a_supprimer,prenom_a_supprimer,tel_a_supprimer,presence_contact);
// elle renvoie p_liste à Ecrire SMS
Puis voici ma fonction Ecrire_SMS :
void EcrireSMS(char *nomSMS, char *prenomSMS,char *telSMS,char *mailSMS,fiche *p_liste,int nombre_contact)
{
FILE* listeSMS = NULL;
char lettreSMS,SMS[tailleSMS+1],horloge[128],date[150];
int i=0,fin=0;
fiche *ptr=p_liste;
_tzset();
_strtime(horloge);
time_t time_of_day; //valeur contenant le temps écoulé depuis le 01/01/1970
time_of_day = time( NULL ); //récupérer le temps passé
strftime(date,150,"%Y/%m/%d",localtime( &time_of_day ) ); //inscrire dans la chaîne buffer notre string telle que nous la voulons
listeSMS=fopen("SMS.txt","w+");
system("cls");
printf("Entrez votre SMS (160 caractères au maximun)\n");
while (lettreSMS!=13&&i<tailleSMS)
{
lettreSMS=getch();
printf("%c",lettreSMS);
SMS[i]=lettreSMS;
i++;
}SMS[i-1]='\0';
while (fin==0) // C'EST ICI QUE J'ESSAIE DE L'INITIALISER
{
ptr->UnContact.UnSMS.p_suivant=NULL;
if(ptr->p_suivant==NULL)
fin=1;
else
ptr=ptr->p_suivant;
} // apparement j'ai essayer de faire printf("%s",ptr->UnContact.UnSMS.p_suivant); ça me met null. ok
if (listeSMS) // ICI J'AIMERAI CREER UN JETON DE TYPE LISTE_SMS mais mon pointeur ptr ne pointe plus sur le même endroit et donc je ne sais pas comment ré-atteindre le bon endroit
{
printf(listeSMS,"%s|%s|%s|%s|%s|%s|%s|\n",nomSMS,prenomSMS,telSMS,mailSMS,date,horloge,SMS);
fclose(listeSMS);
}
}
J'aimerai créer un jeton de la manière suivante :
liste_sms* nouveau=(liste_sms*)malloc(sizeof(liste_sms)); // on crée un nouveau jeton de type liste_sms
creation_jetonSMS(nouveau,date,horloge,SMS);
(*nouveau).p_suivant=(*p_liste).UnContact.UnSMS.
(*p_liste).UnContact.UnSMS.p_suivant=nouveau;
mais bon je ne sais pas si c'est avec p_liste que je doit le faire.
Merci et si vous avez des questions, n'hésitez pas je reveindrait régulièrement pour regarder vos commentaires.
+++
A voir également:
- [C] Liste chainée dans liste chainée.
- Liste déroulante excel - Guide
- Liste code ascii - Guide
- Liste déroulante en cascade - Guide
- Site dangereux liste - Guide
- Voir liste d'amis facebook - Guide
2 réponses
Voici un exemple
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct A_{
char ville[30];
struct A_ *suivant;
}Adresse;
typedef struct L_{
char nom[30];
char prenom[30];
char tel[15];
char mail[30];
struct L_ *suivant;
Adresse *l_imbriquee; // liste imbriquée
}Liste;
void InsertionEnTete(Liste **pp_L,char *nom,char *prenom,char *tel,char *mail);
void InsertionEnTete2(Adresse **pp_A,char *ville);
void AfficherListe(Liste *L);
void AfficherAdresse(Adresse *A);
int main()
{
Liste *L;
Adresse *A;
char adresse[100];
char ville[30];
char nom[30];
char prenom[30];
char tel[15];
char mail[30];
L=NULL;A=NULL;
printf("----------------------------\n");
printf("Nom? ");
scanf("%s",nom);
printf("Prénom? ");
scanf("%s",prenom);
printf("Téléphone? ");
scanf("%s",tel);
printf("Mail? ");
scanf("%s",mail);
InsertionEnTete(&L,nom,prenom,tel,mail);
printf("Ville? ");
scanf("%s",ville);
InsertionEnTete2(&L->l_imbriquee,ville);
printf("Données personnelles : \n");
printf("----------------------------\n");
AfficherListe(L);
printf("----------------------------\n");
printf("Adresse : \n");
AfficherAdresse(L->l_imbriquee);
printf("----------------------------\n");
printf("Nom? ");
scanf("%s",nom);
printf("Prénom? ");
scanf("%s",prenom);
printf("Téléphone? ");
scanf("%s",tel);
printf("Mail? ");
scanf("%s",mail);
InsertionEnTete(&L,nom,prenom,tel,mail);
printf("Ville? ");
scanf("%s",ville);
InsertionEnTete2(&L->l_imbriquee,ville);
printf("Ville2? ");
scanf("%s",ville);
InsertionEnTete2(&L->l_imbriquee,ville);
printf("Données personnelles : \n");
AfficherListe(L);
printf("----------------------------\n");
printf("Adresse : \n");
AfficherAdresse(L->l_imbriquee);
return 0;
}
void InsertionEnTete(
Liste **pp_L,
char *nom,char *prenom,char *tel,char *mail){
Liste *nouveau;
nouveau=(Liste*)malloc(sizeof(Liste));
strcpy(nouveau->nom,nom);
strcpy(nouveau->prenom,prenom);
strcpy(nouveau->tel,tel);
strcpy(nouveau->mail,mail);
nouveau->l_imbriquee=NULL;
nouveau->suivant=*pp_L;
*pp_L=nouveau;
}
void InsertionEnTete2(Adresse **pp_A,char *ville){
Adresse *nouveau;
nouveau=(Adresse*)malloc(sizeof(Adresse));
strcpy(nouveau->ville,ville);
nouveau->suivant=*pp_A;
*pp_A=nouveau;
}
void AfficherListe(Liste *L){
Liste *courant;
for(courant=L;courant!=NULL;courant=courant->suivant){
printf("%s\n",courant->nom);
printf("%S\n",courant->prenom);
printf("%s\n",courant->tel);
printf("%s\n",courant->mail);
}
}
void AfficherAdresse(Adresse *A){
Adresse *courant;
for(courant=A;courant!=NULL;courant=courant->suivant)
printf("%s\n",courant->ville);
}Et le testlami20j@ubuntu:~$ ./a.out ---------------------------- Nom? azerty Prénom? aaa Téléphone? 0111111111 Mail? azerty@yahoo.fr Ville? paris Données personnelles : ---------------------------- azerty 0111111111 azerty@yahoo.fr ---------------------------- Adresse : paris ---------------------------- Nom? qwerty Prénom? bbb Téléphone? 0211111111 Mail? qwerty@hotmail.com Ville? washington Ville2? boston Données personnelles : qwerty 0211111111 qwerty@hotmail.com azerty 0111111111 azerty@yahoo.fr ---------------------------- Adresse : boston washington lami20j@ubuntu:~$
Salut,
Pour chaque contacts, je souhaiterait créer une liste chainée à l'intérieur de celle çi.
Pourquoi pas ajouter plusieurs champs dans la structure?
En ce cas chaque contact devrais être la tête de la liste correspondante.
Bref, tu crées un pointeur de type liste par exemple liste_imbriquee pour obtenir ta liste imbriquée
Pour chaque contacts, je souhaiterait créer une liste chainée à l'intérieur de celle çi.
Pourquoi pas ajouter plusieurs champs dans la structure?
En ce cas chaque contact devrais être la tête de la liste correspondante.
Bref, tu crées un pointeur de type liste par exemple liste_imbriquee pour obtenir ta liste imbriquée
merci bien !!