IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Gestion des employés et fichiers


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2010
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 78
    Par défaut Gestion des employés et fichiers
    salut

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    #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. #2
    Membre expérimenté Avatar de Grulim
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 234
    Par défaut
    Tu utilises
    scanf("%s",&e.adr.nom_rue);
    donc tu passes un pointeur sur un pointeur de chaine de caractères , il suffit de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    scanf("%s",e.adr.nom_rue);
    De plus, le %s coupe la chaine au premier caractère "espace" trouvé, je crois...
    Voir le tutoriel scanf ici

  3. #3
    Membre expérimenté Avatar de Grulim
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 234
    Par défaut
    Tes "#include" sont étranges pour un programme C (cstdlib -> stdlib.h, iostream ??)
    Et pis l'indentation et la déclaration de variables de différents types sur une seule ligne .

  4. #4
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    La présentation d'un programme est importante pour la compréhension. On ne peut pas dire que le tien soit optimal de ce point de vue. En y mettant un peu d'ordre (et quelques corrections) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    #include <stdlib> 
    #include <stdio.h> 
    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;
     
    int main(void) 
    {  
       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; 
    }
    Pour les caractères bizarres qui apparaissent : lorsque tu entres tes données pour les mettre dans les tableaux avec tes scanf(), les tableaux ne sont que partiellement remplis : si ils sont plus grands (et cela vaut évidemment mieux) que la chaine tapée au clavier (+ le '\0' terminal), la fin du tableau n'est pas modifiée et contient n'importe quoi. Ceci donne les caractères bizarres que tu observes. Normalement, le contenu des tableaux après le caractère '\0' n'est pas significatif et ne devrait pas être affiché ni utilisé par le programme.
    Ta procédure pour relire les données est incorrecte : tu devrais relire par un fread() dans une structure etudiant et ensuite afficher le contenu de chaque champ de la structure par des fprintf() avec %s ou %d selon le cas.

  5. #5
    Membre confirmé
    Inscrit en
    Janvier 2010
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 78
    Par défaut problème en C
    salut

    voila j'ai remodifier un peu le code mais le proèblème des caractères spéciaux qui apparaissent en lisant le fichier est tjrs présent:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    #include <stdlib.h>
    #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);
        }
     
    }
    while(fread(&e,sizeof(e),1,pf))
    {
     fprintf("%s",e.nom);
     fprintf("%s",e.prenom);
     fprintf("%d",e.adr.num_rue);
     fprintf("%s",e.adr.nom_rue);
     fprintf("%s",e.adr.nom_ville);
     fprintf("%d",e.adr.code_postal);
    }
    fclose(pf);
     
     
     
     
        system("PAUSE");
        return EXIT_SUCCESS;
    }

    aidez moi pour régler ce problème svp

    merci

  6. #6
    Membre confirmé
    Inscrit en
    Janvier 2010
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 78
    Par défaut problème d'affichage du contenu d'un fichier langage C
    salut

    voici a nouveau les code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    #include <stdlib.h>
    #include <stdio.h>
     typedef struct { int num_rue[30];
                         char nom_rue[60];
                         char nom_ville[60];
                         int  code_postal[30];}adresse;
     
        typedef struct { char nom[30];
                         char prenom[30];
                        adresse adr;}etudiant;
    int main()
    {
     
     
    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);
        }
     
    }
    while(fread(&e,sizeof(e),1,pf))
    {
     printf("%s\t",e.nom);
     printf("%s\t",e.prenom);
     printf("%d\t",e.adr.num_rue);
     printf("%s\t",e.adr.nom_rue);
     printf("%s\t",e.adr.nom_ville);
     printf("%d\t",e.adr.code_postal);
    }
    fclose(pf);
     
     
     
     
        system("PAUSE");
        return EXIT_SUCCESS;
    }
     
     
     
    pour l'affichage j'ai toujours pas le résultat de xe que j'écris dans le fichier
     
    aidez moi s'il vous plait
    merci

Discussions similaires

  1. Gestion des chemins et fichiers hors charset ascii
    Par PatriK-b dans le forum C++Builder
    Réponses: 5
    Dernier message: 18/12/2009, 16h33
  2. gestion des employé - probleme avec un entité
    Par H-bil dans le forum Schéma
    Réponses: 4
    Dernier message: 22/11/2007, 09h37
  3. gestion des erreurs avec fichier .properties
    Par _momo dans le forum Struts 1
    Réponses: 2
    Dernier message: 20/08/2007, 15h05
  4. [Dates] Gestion des dates de fichiers
    Par dug dans le forum Langage
    Réponses: 3
    Dernier message: 16/09/2006, 21h24
  5. base de données de gestion des employés
    Par sam_212 dans le forum Access
    Réponses: 4
    Dernier message: 02/08/2006, 15h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo