Lire dans un fichier en C

Résolu
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   -
Bonjour,

j'ai un code qui demande à un utilisateur de rentrer des données (tout via des fonctions), elles sont ensuite transcrites dans un fichier (fonction ecrireFichier) mais je n'arrive pas à relire ce fichier (fonction lireFichier) dans la console et je ne vois pas ce que j'ai fait de mal...

voici mon code

#include <stdio.h>
#include <stdlib.h>
#define M 50

void encode();
void afficheTout();
void modifie();
void afficheUn();
void ecrireFichier();
void lireFichier();

typedef struct Personne
{
    char nom[M];
    char prenom[M];
    char loc[M];
    int age;
}Pers;
Pers P[3];

FILE *fichier;
int main()
{

    int choix;
    do
    {

        printf("=======MENU=======\n");
        printf("-1- encode \n");
        printf("-2- affiche\n");
        printf("-3- modifie\n");
        printf("-4- affiche un\n");
        printf("-5- ecrire dans fichier\n");
        printf("-6- lire dans fichier\n");
        printf("votre choix====>");
        scanf("%d", &choix);

        switch (choix)
        {
        case 1 :
            encode();
            break;
        case 2 :
            afficheTout();
            break;
        case 3 :
            modifie();
            break;
        case 4 :
            afficheUn();
            break;
        case 5 :
            ecrireFichier();
            break;
        case 6 :
             lireFichier();
            break;
        case 0 :
            printf("Bye!!!");
        }

    }
    while (choix!=0);




    return 0;
}
void encode()
{
    int i;
    for (i=0;i<3;i++)
    {
        printf("nom : ");
        scanf("%s", P[i].nom);
        printf("prenom : ");
        scanf("%s", P[i].prenom);
        printf("localite : ");
        scanf("%s",P[i].loc);
        printf("age :");
        scanf("%d", &P[i].age);
    }
}

void afficheTout()
{
    int j;
    for (j=0;j<3;j++)
        printf("numero = %d\t nom : %s\t prenom : %s\t localite : %s\t age : %d\n",j+1 , P[j].nom, P[j].prenom, P[j].loc, P[j].age);
}
void modifie()
{
    int j;
    for (j=0;j<3;j++)
        printf("numero : %d\tnom : %s\t prenom : %s\t localite : %s\t age : %d\n",j+1, P[j].nom, P[j].prenom, P[j].loc, P[j].age);

    int num = 0;
    printf("numero de la personne a modifier");
    scanf("%d", &num);


    printf("nom a modifier: ");
    scanf("%s", P[num].nom);
    printf("prenom : ");
    scanf("%s", P[num].prenom);
    printf("localite : ");
    scanf("%s",P[num].loc);
    printf("age :");
    scanf("%d", &P[num].age);


}
void afficheUn()
{
    int num=0, j;
    printf("numero de la personne a afficher : ");
    scanf("%d", &num);
    for (j=1;j<4;j++)
    {
        if (num==j)
            printf("numero = %d\t nom : %s\t prenom : %s\t localite : %s\t age : %d\n",j+1 , P[j].nom, P[j].prenom, P[j].loc, P[j].age);
    }
}

void ecrireFichier()
{
    int i;

    fichier=fopen("essai.txt", "w");

    for (i=0;i<3;i++)
        fprintf(fichier, "numero = %d\t nom : %s\t prenom : %s\t localite : %s\t age : %d\n",i+1 , P[i].nom, P[i].prenom, P[i].loc, P[i].age);
    fflush(fichier);
    fclose(fichier);
}

void lireFichier()
{
    int i;

    fichier=fopen("essai.txt", "r");

    for (i=0;i<3;i++)
        fscanf(fichier, "numero = %d\t nom : %s\t prenom : %s\t localite : %s\t age : %d\n",&i+1 , P[i].nom, P[i].prenom, P[i].loc, &P[i].age);
    fflush(fichier);
    fclose(fichier);
}






Merci d'avance pour vos interventions
A voir également:

3 réponses

Utilisateur anonyme
 
le fscanf:
fscanf(fichier, "numero = %d\t nom : %s\t prenom : %s\t localite : %s\t age : %d\n",&i+1 , P[i].nom, P[i].prenom, P[i].loc, &P[i].age);

tu dois juste mettre les indicateur de format (%s, %d...) pas autre chose comme numero prenom ou des conneries comme ca
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Salut,

Ce ne sont pas des conneries. Tu peux mettre ce que tu veux, sauf les chaînes format seront remplacées par les variables.
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Re,

Oups, tu as raison ;-)
J'ai confondu avec la famille printf ;-))
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Re,

Tu le lis mais il n'y a rien qui s'affiche.
C'est normal, tu as oublié printf

Essaie
void lireFichier(){
  int i;
  fichier=fopen("essai.txt", "r");

  for (i=0;i<3;i++){
    fscanf(fichier, "%s%s%s%d", P[i].nom, P[i].prenom, P[i].loc, &P[i].age);
    printf("numero = %d\t nom : %s\t prenom : %s\t localite : %s\t age : %d\n",
           i+1 , P[i].nom, P[i].prenom, P[i].loc, P[i].age);
    fclose(fichier);
  }
}



0
limbergh Messages postés 658 Date d'inscription   Statut Membre Dernière intervention   140
 
Salut,

j'ai juste changer la fermeture du fichier de place car cela ne fonctionnait pas bien sinon. Encore merci pour ton aide lami20j, comme d'habitude super efficace...

void lireFichier(){
  int i;
  fichier=fopen("essai.txt", "r");

  for (i=0;i<3;i++){
    fscanf(fichier, "%s\t%s\t%s\t%d", P[i].nom, P[i].prenom, P[i].loc, &P[i].age);
    printf("numero = %d\t nom : %s\t prenom : %s\t localite : %s\t age : %d\n", i+1 , P[i].nom, P[i].prenom, P[i].loc, P[i].age);
  }
   fclose(fichier);
}


Bon dimanche
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Re,

De rien ;-)

j'ai juste changer la fermeture du fichier de place car cela ne fonctionnait pas bien sinon
C'était un test pour voir si tu suis ;-))))



Non, je plaisante, j'ai mélangé les pinceaux avec les copier/coller ;-)

Bon dimanche à toi.
0