Probleme dans ma liste chainee

Résolu
jo_one Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   -  
mamiemando Messages postés 33772 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,a tous je suis debutant en programmation et je voudrais realiser un petit programme en C qui gere les heures de travails; g commencer par declarer ma structure et ensuite g voulu en faire un tableau en allouant de la memoire a chaque structures entrees. pour ce j'utilise une liste chainee mais a l'affichage, le resulta est nul! pouvez vous m'aider en me signalant mes erreurs afin que je puisse comprendre la matiere svp! voici mon code source:

#include "stdio.h"
#include "stdlib.h"
#include "malloc.h"

struct heure{
int h; // pour les heures
int m; // pour les minutes
};
struct date{
int jrs; //pour les jours
int mois;
int ann; //pour l'annee
};
struct fiche{
struct date jours;
struct heure debut;
struct heure fin;
float t_trv; // le resulta du temps de travaile
struct fiche *suivant;
};
typedef struct fiche liste;

int main()
{
liste date;
liste *premier,*second;

date->suivant=NULL;
premier=&date;
premier=(liste *)malloc(sizeof(liste));
if(premier==NULL){
printf("erreur\n");
}
second=premier;
while(scanf(" %d/%d/%d ",&second->jours.jrs,&second->jours.mois,&second->jours.ann)==3){
second->suivant=(liste *)malloc(sizeof(liste));
if(second==NULL){
printf(" erreur_2\n");
}
second=second->suivant;
second->suivant=NULL;
}
free(second);

// affichage de ma liste
for(second=premier; second !=NULL; second=second->suivant)
printf(" %d/%d/%d \n",second->jours.jrs,second->jours.mois,second->jours.ann);


return 0;
}
A voir également:

4 réponses

mamiemando Messages postés 33772 Date d'inscription   Statut Modérateur Dernière intervention   7 882
 
Quelques remarques au préalable :

1) Les #include incluent des headers standards donc tu es sensé écrire
#include <stdio.h>
...

2) En toute rigueur, il y a un petit problème de design en terme de structure. Il faut distinguer une fiche (la donnée stockée dans le maillon) d'un maillon (une donnée et un pointeur vers le maillon suivant). Pour une liste générique il suffit alors de stocker un "struct maillon *" qui pointe sur le maillon suivant et un "void *" qui pointe sur la donnée la fiche en l'occurrence). Dès lors tu peux programmer un module de liste chaînée générique munies de fonctions d'insertion et de suppression.

3) Si tu peux programmer en C++ ton programme s'écrit très facilement avec des std::list.
https://community.hpe.com/t5/custom/page/page-id/HPPSocialUserSignonPage?redirectreason=permissiondenied&referer=https%3A%2F%2Fcommunity.hpe.com%2Ft5%2FServers-Systems-The-Right%2FSGI-com-Tech-Archive-Resources-now-retired%2Fba-p%2F6992583

Je n'ai malheureusement pas le temps de te corriger ton programme je dois partir dans quelques minutes. Afin de comprendre ce qui ne marche pas dans ton programme n'hésite pas à utiliser un debugger. Au passage j'ai relevé cette erreur à la compilation :
int main()
{
    liste date;
    liste *premier,*second;

    date->suivant=NULL;
...

Ca devrait être
date.suivant = NULL;

Bonne chance
0
jo_one Messages postés 2 Date d'inscription   Statut Membre Dernière intervention  
 
je te remercie pour tes information ! en toute franchise je vais aller voir dans mes bouquins avec tes info car je ne suis tjs pas plus eclairer, ce qui est plutot normale car j'apprends seul!!!!
0
mamiemando Messages postés 33772 Date d'inscription   Statut Modérateur Dernière intervention   7 882
 
Bah en gros si tu corriges la ligne que je t'ai indiqué le programme marche (en italique c'est ce que j'ai tapé) et si tu mets bien les #include comme je t'ai dit:
2/8/5
1/2/9
o
 2/8/5
 1/2/9
 0/0/0

Par contre en tout rigueur il y a des structures que tu alloues (malloc) mais que tu ne désalloues pas à la fin de ton programme (free) ce qui est pas top. Idéalement ton programme devrait se terminer par un parcours de la liste et un free de chaque maillon. Bien entendu il ne faut pas libérer un maillon d'avoir stocker la position du maillon qui suit.

Si tu as besoin de complément d'information ou si des points ne te paraissent pas clair n'hésite pas, j'essaierai d'être plus claire. Et si ton problème est résolu, pense à le cocher comme tel ;-)

Bonne chance
0
jo_one
 
cc, je tenais a te remercier pour ton aide qui m'a ete d'une grande utiliter! g fini par enlever un pointeur liste de facon a ne travailler qu'avec un seul et ça fonctionne apparament! maintenant je vais essayer dans faire deux fonctions (initialiser_date et affich_liste).
0
mamiemando Messages postés 33772 Date d'inscription   Statut Modérateur Dernière intervention   7 882
 
Ok bon courage :-) Pour les problèmes ultérieurs que tu pourrais rencontrer, ouvre un nouveau sujet.

Bonne chance
0