Probleme d'affichage des donnes d 'un fichier ou pb d'enregistrement des donnees
cs_Yossi
Messages postés40Date d'inscriptionmardi 11 mars 2003StatutMembreDernière intervention 5 septembre 2006
-
17 juin 2004 à 18:09
cs_Yossi
Messages postés40Date d'inscriptionmardi 11 mars 2003StatutMembreDernière intervention 5 septembre 2006
-
18 juin 2004 à 10:31
bonjour,
voici ma structure:
struct adherents{
int numadherent;
char nom[25];
char prenom[30];
char adresse[80];
char cp[5];
char ville[40];
};
voici mon code pour l'enregistrement d 'un adherent:
et voici mon code pour l'affichage des donnees:
printf("\nEntrez le numero d'adherent\n");
int num=0;
scanf("%d",&num);
struct adherents s;
FILE *pf=NULL;
pf=fopen("adherents","rb");
if (pf!=NULL)
{
while (fread(&s,sizeof(s),1,pf),!feof(pf)&& num!=s.numadherent)
{
}
if (feof(pf))
{
printf("Adherent non trouve\n");
}
else
{
printf("Informations sur l'adherent numero %d\n\n",s.numadherent);
printf("\nNom : %s",s.nom);
printf("\nPrenom : %s",s.prenom);
printf("\nAdresse : %s",s.adresse);
printf("\ncode postal : %s",s.cp);
printf("\nVille : %s\n",s.ville);
}
fclose(pf);
}
else
{
printf("Aucun adherent n'est enregistre\n");
}
system("pause");
voila . mon probleme c'est que au lieu de donner comme code postal par exemple : "75011" ca donne "75011paris" (le code postal et la ville). si vous savez d'ou vient le probleme ca m'aiderait beaucoup. Merci d'avance.
Yossi
A voir également:
Probleme d'affichage des donnes d 'un fichier ou pb d'enregistrement des donnees
ShareVB
Messages postés2676Date d'inscriptionvendredi 28 juin 2002StatutMembreDernière intervention13 janvier 201626 17 juin 2004 à 19:49
salut
en fait, un tableau char est traité comme un pointeur par printf, et comme cp fait 5 caracteres max et 75011 5 aussi, il n'y a donc pas de null à la fin des char. Les données de ville suivent celle de cp. Donc en mémoire à l'adresse de cp on a : "75011paris/0" ...ceci explique cet affichage... si on fait un strlen il renverra 10...
printf affiche une chaine du début au premier null...
il faut donc que tu mettes :
printf("\ncode postal : %.5s",s.cp);
//5 caracteres maxi
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 17 juin 2004 à 22:50
le mieux c'est de prévoir la place pour le nul de terminaison dans les chaînes de la structure, car si tu copie une chaîne dans le champ cp, le nul risque d'écraser le champs suivant.