Traitement fichier en C

limbergh Messages postés 669 Statut Membre -  
lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   -
Bonsoir,
j'ai vu au cours (du soir) le traitement des fichiers. J'ai fait u code qui demande
à l'utilisateur d'introduire 3 noms ainsi que leur age et une fois l'introduction faite,
d'enregistrer le tout dans un fichier.
Tout se passe bien pour l'encodage et une fois que l'on demande d'introduire le
nom du fichier, après ça, ça plante. Je ne vois pas pourquoi, si quelqu'un peut m'expliquer
c'est avec joie...

Voici mon code

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct personne
{
char nom[25];

int age;
} PERS;

int main(int argc, char *argv[])
{
PERS p;
char nom2[30];
FILE *fichier;
int i=0;
char nomfichier[50];
for (i=0;i<3;i++)
{

printf("Nom a encoder ? ");
gets(nom2);

strcpy(p.nom, nom2);
printf ("age ? ");
scanf("%d", &p.age);
printf("vous avez encode %s\t%d\n", p.nom, p.age);
fflush(stdin);

}
printf("le nom du fichier ? ");
gets(nomfichier);

fichier=fopen(nomfichier, "r");
fprintf(nomfichier, "%s %d", p.nom, p.age);
fclose(nomfichier);

system("PAUSE");
return 0;
}

Merci d'avance
Configuration: Windows XP
Firefox 2.0.0.12

1 réponse

  1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    tu n'as pas besoin d'une structure pour ce cas simple.

    tu n'as qu'à faire une boucle de saisie et tu écrit directement dans le fichier
    lami20j@debian:~/trash$ cat limbergh.c
    #include <stdio.h>
    
    int main (int argc, char *argv[])
    {
      char nom[30];
      int age;
    
      FILE *fichier;
      int i = 0;
    
      fichier = fopen("nometage.txt","a+");
    
      for (i = 0; i < 3; i++) {
        printf ("Nom a encoder ? ");
        scanf("%s",nom);
        printf ("age ? ");
        scanf ("%d", &age);
        printf ("vous avez encode %s\t%d\n", nom, age);
        fprintf(fichier,"%s %d\n",nom,age);
      }
      fclose (fichier);
      return 0;
    }
    lami20j@debian:~/trash$ gcc limbergh.c
    lami20j@debian:~/trash$ ./a.out
    Nom a encoder ? aaa
    age ? 10
    vous avez encode aaa    10
    Nom a encoder ? bbb
    age ? 20
    vous avez encode bbb    20
    Nom a encoder ? ccc
    age ? 30
    vous avez encode ccc    30
    lami20j@debian:~/trash$ cat nometage.txt
    aaa 10
    bbb 20
    ccc 30
    lami20j@debian:~/trash$
    fflush(stdin) et complétement inutile c'est juste une illusion
    fflush traite les flux en écriture (stdin c'est l'entrée standard donc lecture)
    0