Problème en C

Résolu/Fermé
lamou23 Messages postés 178 Date d'inscription lundi 11 janvier 2010 Statut Membre Dernière intervention 21 mars 2011 - 31 mai 2010 à 19:53
gargoyle44 Messages postés 15 Date d'inscription mercredi 2 juin 2010 Statut Membre Dernière intervention 7 juin 2010 - 6 juin 2010 à 19:27
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 lundi 23 juin 2008 Statut Membre Dernière intervention 19 décembre 2010 15
6 juin 2010 à 11:42
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 mercredi 2 juin 2010 Statut Membre Dernière intervention 7 juin 2010 3
Modifié par gargoyle44 le 6/06/2010 à 19:38
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