Groupe : Membres
|
Bonjour , voilà j'ai un problème d'affichage ^^, il m'affiche tout le temps liste vide quand j'ajoute une fiche  ...
Merci d'avance
Code : C 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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139 | // Chaine.cpp : définit le point d'entrée pour l'application console.
//
#include "stdafx.h"
#include "stdlib.h"
#include "malloc.h"
void ajout(struct liste *,struct liste *,struct liste *);
void affiche(struct liste *,struct liste *,struct liste *);
struct liste
{
char prenom[30];
int age;
struct liste *psvt;
};
typedef struct liste* LISTE;
static void vider(void)
{
int c;
while ((c = getchar()) != '\n' && c != EOF)
{}
}
int main()
{
LISTE ptete = NULL,ptemp = NULL, psuivant = NULL;
int choix;
do
{
system("cls");
printf("1. Ajout\n");
printf("2. Afficher\n");
printf("3. Quitter\n");
printf("Choix : ");
scanf("%d",&choix);
switch(choix)
{
case 1:
ajout(ptete,ptemp,psuivant);
break;
case 2:
affiche(ptete,ptemp,psuivant);
break;
}
}
while(choix != 3);
return 0;
}
void ajout(struct liste *ptete,struct liste *ptemp ,struct liste *psuivant )
{
ptemp = (liste *)malloc(sizeof(liste));
if(ptemp != NULL)
{
if(ptete == NULL)
{
printf("Prenom :");
vider();
gets(ptemp->prenom);
printf("Age :");
scanf("%d",&(ptemp->age));
ptemp->psvt = NULL;
ptete = ptemp;
psuivant = ptete;
ptemp == NULL;
}
else
{
printf("Prenom :");
fflush(stdin);
gets(ptemp->prenom);
printf("Age :");
scanf("%d",&(ptemp->age));
ptemp->psvt = NULL;
while (psuivant->psvt != NULL)
{
psuivant=psuivant->psvt;
}
psuivant->psvt=ptemp;
}
}
}
void affiche(struct liste *ptete,struct liste *ptemp ,struct liste *psuivant)
{
psuivant=ptete;
if(ptete != NULL)
{
while(psuivant != NULL)
{
printf("%s\n",psuivant->prenom);
printf("%d\n\n",psuivant->age);
psuivant = psuivant->psvt;
}
system("pause");
}
else
if(ptete == NULL)
{
printf("Liste vide\n");
system("pause");
}
}
|
|
Pourquoi, il en faut une?
 Groupe : Membres
|
Je trouve tes includes bizarres, non  ? Pour les bibliothèques standards, on utilise des chevrons <stdlib.h>.
 Pas de fautes d'orthographe s'il vous plaît et un peu de respect pour la syntaxe
|
Groupe : Membres
|
sous visual studio 2005 Pro les includes marchent avec "" ou <> mais peut être pas avec les autres programmes
|
Pourquoi, il en faut une?
 Groupe : Membres
|
Peux-tu me donner le rôle de ta fonction vider() ? Elle ne semble ne vider que le buffer et ne permet pas la saisie d'un nom. A ma connaissance, EOF ne s'utilise qu'avec les fichiers (c'est à vérifier).
Ou sinon, vérifie que tu n'as pas fait d'erreur avec les pointeurs. Je crois qu'il faut mettre un "&" lors de l'appel de la fonction ajout.
Et si tu as du temps, ajoute quelques commentaires dans ton code, je pense que cela peut t'aider à y voir plus clair (et à moi aussi  ).
J'ai revu ton code à ma façon (j'ai essayé de conserver ton code au maximum). Tu peux l'améliorer ou même le modifier. Un conseil avant de le lire, lorsque tu code fais morceau par morceau pour ne pas te perdre et savoir où son tes premières erreurs ! Dans le cas contraire, tu ne pourra plus rien comprendre. Crois en mon expérience !
Code : C 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 | // Chaine.cpp : définit le point d'entrée pour l'application console.
//
#include <string.h>
#include <stdlib.h>
void ajout(int *, int);
void afficheStruct(int, int);
struct liste//On définit une structure permettant d'entrer des informations
{
char prenom[30];
int age;
};
typedef struct liste LISTE;
int main()
{
LISTE *dossier = NULL, *dossierSauvegarde = NULL, *dossierNouveau = NULL;//pointeurs de type LISTE
int choix, nombreAmis = 0, ancienAmis = 0;
int i = 0, j = 0, k = 0;//Variables servant à l'incrémentation
while(choix != 3)//On rentre dans la boucle principale
{
system("cls");
printf("1. Ajout\n");//Affichage du menu
printf("2. Afficher\n");
printf("3. Quitter\n");
printf("Choix : ");
scanf("%d",&choix);
switch(choix)
{
case 1://Si on souhaite faire un ajout
ancienAmis = nombreAmis;
printf("Combien de fiche voulez-vous creer ? ");
scanf("%ld", &nombreAmis);
dossierNouveau = malloc((nombreAmis)*sizeof(LISTE));
printf("Merci de remplir le formulaire\n");
for (i=0; i<nombreAmis; i++)
{
printf("Prenom de la personne %ld : ", i+1);
scanf("%s", &dossierNouveau[i].prenom);
printf("Age de la personne %ld : ", i+1);
scanf("%ld", &dossierNouveau[i].age);
}
free(dossierSauvegarde);//On évite les fuites de mémoires, c'est très important pour la suite de l'apprentissage
dossierSauvegarde = malloc((ancienAmis)*sizeof(LISTE));
for (i=0; i<ancienAmis; i++)//On crée une sauvegarde de la liste
{
for (k=0; k<30; k++)
dossierSauvegarde[i].prenom[k] = dossier[i].prenom[k];
dossierSauvegarde[i].age = dossier[i].age;
}
free(dossier);
dossier = malloc((nombreAmis + ancienAmis)*sizeof(LISTE));//on réinitialise la liste
j = 0;
for (i=0; i<ancienAmis; i++)//On copie la sauvegarde dans la nouvelle liste afine de ne pas la perdre
{
for (k=0; k<30; k++)
dossier[i].prenom[k] = dossierSauvegarde[i].prenom[k];
dossier[i].age = dossierSauvegarde[i].age;
}
for (i=ancienAmis; i<nombreAmis+ancienAmis; i++)//Et on ajoute les nouvelles listes
{
for (k=0; k<30; k++)
dossier[i].prenom[k] = dossierNouveau[j].prenom[k];
dossier[i].age = dossierNouveau[j].age;
j++;
}
nombreAmis +=ancienAmis;//On met le nombre d'ami(s) enregistré à jour
free(dossierNouveau);
break;
case 2:
for (i=0; i<nombreAmis; i++)
{
printf("%s a %ld ans\n", dossier[i].prenom, dossier[i].age);
}
system("PAUSE");
break;
}
}
free(dossier);
free(dossierNouveau);
free(dossierSauvegarde);
return EXIT_SUCCESS;//C'est mieux que "return 0" ;)
}
|
 Pas de fautes d'orthographe s'il vous plaît et un peu de respect pour la syntaxe
|