Lire dans un fichier en C

Résolu/Fermé
limbergh Messages postés 658 Date d'inscription dimanche 8 juillet 2007 Statut Membre Dernière intervention 29 juin 2010 - 25 janv. 2009 à 10:06
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 25 janv. 2009 à 16:26
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
25 janv. 2009 à 14:42
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 jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
25 janv. 2009 à 14:49
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 jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
25 janv. 2009 à 14:50
Re,

Oups, tu as raison ;-)
J'ai confondu avec la famille printf ;-))
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
25 janv. 2009 à 14:56
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 dimanche 8 juillet 2007 Statut Membre Dernière intervention 29 juin 2010 140
25 janv. 2009 à 16:05
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 jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
25 janv. 2009 à 16:26
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