Traitement fichier en C

limbergh Messages postés 669 Statut Membre -  
lami20j Messages postés 21644 Statut Modérateur, Contributeur sécurité -
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 21644 Statut Modérateur, Contributeur sécurité 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