bonjour,

je vous explique le probleme:

On gère un écheancier grâce à une liste chainée à deux niveaux. Chaque bloc de la liste du premier niveau est de la forme:
*annee sur 4caractères
*numéro de semaine ( de 01 à 53)
*pointeur vers la liste des actions de la semaine
*pointeur vers la semaine suivante

chaque bloc de la liste chainée des actions est de la forme:
*jour de la semaine (de 1 à 7 )
* heure (de 00 à 24)
* nom de l'action (champs de 10 caractères non terminé par null)
* pointeur vers l'action suivante

Je dois creer une structure de données initales en mémoire à partir d'un fichier texte ou chaque ligne donnée, sans séparateur:
*année, semaine, jour, heure, action
exemple: 200810312TRAVAILLER

J'ai deja fait une base comme veux mon prof mais ca coince et je ne vois pas ou. (Je debute)

je joint ma base, si vous avez une solution ou que vous voulez des explications, je suis la!

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
 
/** ******************************************* **/
/** structure definissant jour, heure et action **/
/** ******************************************* **/
typedef struct action {
    char action[3]       ;
    char lib[10]         ;
    struct action * suiv    ;
} action_t;
 
/** ******************************************* **/
/** structure definissant l'annee et la semaine **/
/** ******************************************* **/
typedef struct annee {
    char    anneesemaine[6]  ;
    action_t * action        ;
    struct  annee * suiv     ;
} annee_t;
 
 
/** ******************************************* **/
/** initialisation des variables globales       **/
/** ******************************************* **/
 
annee_t  * premierniveau = NULL ;
action_t * secondniveau  = NULL ;
 
/** ******************************************** **/
/**         fonction gerant les pointeurs        **/
/**  deplace les pointeurs de tete dans la
/**  fonction insere
/**
/**  -endroit: indique quel pointeur changer     **/
/** ******************************************** **/
/*
void pointeur(annee_t ** prec, action_t ** preca, annee_t * nouv, action_t * nouva, int endroit)
{
    if (endroit == 1)
    {
        * prec = nouv;
        preca  = &nouv -> action;
    }
    else
    {
*/
/** ******************************************** **/
/**   fonction gérant les deux structures        **/
/**  - entree: nom fichier                       **/
/**  - sortie: rien                              **/
/** ******************************************** **/
 
void insere (annee_t ** tete, char nomfichier[])
{
	char annee[6];                      /** sauvegarde temporaire annee semaine **/
	char action[3];                      /** sauvegarde temporaire jour heure **/
	char lib[10];                    /** sauvegarde temporaire action **/
 
	annee_t  ** prec  = tete;
	action_t ** preca = NULL;
	annee_t  *  nouv  = NULL;
	action_t *  nouva = NULL;
 
    FILE  * fichier = NULL;
 
    fichier = fopen(nomfichier,"r");
 
	fscanf(fichier, "%6c", annee);
	fscanf(fichier, "%3c",  action);
    fscanf(fichier, "%10c", lib);
 
    while (feof(fichier) != 1)
    {
        nouv = (annee_t *) malloc (sizeof(annee_t));
        strncpy(annee,nouv -> anneesemaine,6);
        * prec = nouv;
        preca  = &nouv -> action;
 
        while(feof(fichier) != 1 && strncmp(nouv -> anneesemaine, annee, 6) == 0)
        {
            nouva   = (action_t *) malloc (sizeof(action_t));
            strncpy(action, nouva -> action, 3);
            strncpy(lib, nouva -> lib, 10);
            * preca = nouva;
 
            fscanf(fichier, "%6c", annee);
            fscanf(fichier, "%3c",  action);
            fscanf(fichier, "%10c", lib);
        }
    }
    fclose(fichier);
}
 
int main()
{
    char nomfichier[64];
 
 
    printf("entrer le nom du fichier\n");
    scanf("%s", nomfichier);
 
    premierniveau = (annee_t *) malloc (sizeof(annee_t));
    insere(&premierniveau, nomfichier);
 
    return 0;
}