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 -
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
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
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.
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.
Utilise plutôt ça pour lire ton fichier:
Ç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.
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.