Problème en C

Résolu
lamou23 Messages postés 178 Date d'inscription   Statut Membre Dernière intervention   -  
gargoyle44 Messages postés 15 Date d'inscription   Statut Membre Dernière intervention   -
salut

j'ai réalisé le programme qui suit quit consiste à remplir un fichier contenant des informations sur des employés,voici le code:

#include <cstdlib>
#include <iostream>
#include <stdio.h>


int main()
{
typedef struct { int num_rue[30];
char nom_rue[60];
char nom_ville[60];
int code_postal;}adresse;

typedef struct { char nom[30];
char prenom[30];
adresse adr;}etudiant;

etudiant e;int i;FILE*pf;int n;char m;char x;
/*ouverture du fichier*/
pf=fopen("employe.dat","wb");
if (pf==NULL) puts ("erreur d'ouverture du fichier");
else
{
printf ("donner la valeur de n\n");
scanf("%d",&n);
for(i=1;i<=n;i++)
{ printf ("donnez le nom de l'employe %d\n",i);
scanf("%s",e.nom);
printf ("donnez le prenom de l'employe %d\n",i);
scanf("%s",e.prenom);
printf ("donnez le numero de rue de l'adresse de l'employe %d\n",i);
scanf("%d",e.adr.num_rue);
printf ("donnez le nom de la rue de l'adresse de l'employe %d\n",i);
scanf("%s",&e.adr.nom_rue);
printf ("donnez le nom de la ville de l'employe %d\n",i);
scanf("%s",e.adr.nom_ville);
printf ("donnez le code postal %d\n",i);
scanf("%d",&e.adr.code_postal);

/*écriture dans le fichier*/
fwrite(&e,sizeof(e),1,pf);
}
fclose(pf);
}
int caractereActuel = 0;
pf = fopen("employe.dat", "r");

if ( pf!= NULL)
{
// Boucle de lecture des caractères un à un
do
{
caractereActuel = fgetc(pf); // On lit le caractère
printf("%c", caractereActuel); // On l'affiche
} while (caractereActuel != EOF); // On continue tant que fgetc n'a pas retourné EOF (fin de fichier)

fclose(pf);
}




system("PAUSE");
return EXIT_SUCCESS;
}
*************************************************************
le problème c'est en affichant le contenu du fichier aprés exacutions, ya pas seulement les informations que j'ai saisies qui s'affichent,ya des caractères spéciaux qui apparaissent aussi!!!!
quelqu'un pourait il m'aider à régler ce problème d'affichage!!

merci d'avance

2 réponses

Sir Isaac Newton Messages postés 193 Date d'inscription   Statut Membre Dernière intervention   15
 
Bonjour,
Pour commencer je vois du C++ et le forum est donc mal intitulé ce qui ne favorise pas les réponses, mais je vous accorde que c'est très proche.
Je vois que vous avez utilisé les fonction d'accès aux fichier du C, aloes qu'il en existe en C++.
Regardez là.
http://pagesperso-orange.fr/stephanie.laporte/Pdf/Les%20fichiers%20en%20C++.pdf
Si ça ne marche pas je vois une autre solution mais plus compliqué donc on verra par la suite.
0
gargoyle44 Messages postés 15 Date d'inscription   Statut Membre Dernière intervention   3
 
Utilise plutôt ça pour lire ton fichier:


do   
{   

 fread(&e,sizeof(etudiant),1,pf);  
 printf ("donnez le nom de l'employe : ");   
 printf("%s\n",e.nom);   
 printf ("donnez le prenom de l'employe : ");   
 printf("%s\n",e.prenom);   
 printf ("donnez le numero de rue de l'adresse de l'employe : ");   
 printf("%d\n",(int)e.adr.num_rue);   
 printf ("donnez le nom de la rue de l'adresse de l'employe : ");   
 printf("%s\n",e.adr.nom_rue);   
 printf ("donnez le nom de la ville de l'employe : ");   
 printf("%s\n",e.adr.nom_ville);  
 printf ("donnez le code postal : ");   
 printf("%d\n",(int)e.adr.code_postal);   
} while (!EOF);  

 fread(&e,sizeof(etudiant),1,pf);  
 printf ("donnez le nom de l'employe : ");   
 printf("%s\n",e.nom);   
 printf ("donnez le prenom de l'employe : ");   
 printf("%s\n",e.prenom);   
 printf ("donnez le numero de rue de l'adresse de l'employe : ");   
 printf("%d\n",(int)e.adr.num_rue);   
 printf ("donnez le nom de la rue de l'adresse de l'employe : ");   
 printf("%s\n",e.adr.nom_rue);   
 printf ("donnez le nom de la ville de l'employe : ");   
 printf("%s\n",e.adr.nom_ville);  
 printf ("donnez le code postal : ");   
 printf("%d\n",(int)e.adr.code_postal);   





Ça devrait mieux fonctionner. Il te manquera qu'à mettre les 2 gros blocs de code qui se répète dans une fonction et le tour est joué!

Et ton erreur provient de là:

fwrite(&e,sizeof(e),1,pf);

En bref, que tes données emplissent ou pas la longueur max de tes variables, le programme inscris quand même tout sur la longueur totale de e.
0