Traitement fichier en C

limbergh Messages postés 658 Date d'inscription   Statut Membre Dernière intervention   -  
lami20j Messages postés 21331 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
A voir également:

1 réponse

lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
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