IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Lecture fichier mais rien ne s'affiche


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2021
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2021
    Messages : 9
    Par défaut Lecture fichier mais rien ne s'affiche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define N 10
    typedef char Chaine[N];
    typedef struct Client Client;
    struct Client
    {
        int id;
        Chaine nom;
    };
     
    void ajouteClientFichier()
    {
        FILE * fichier = NULL;
        Client c1;
     
        fichier = fopen("dataClients.txt", "a");
     
        if (fichier != NULL)
        {
            // Saisie utilisateur
            printf("Entrer l'identifiant du client : ");
            scanf("%d", &c1.id);
            printf("Entrer le nom du client : ");
            scanf("%s", &c1.nom);
     
            // Ecriture dans le fichier
            fprintf(fichier, "\n%d %s", c1.id, c1.nom);
        }
        else
        {
            printf("Impossible d'ouvrir le fichier dataClients.txt");
        }
        fclose(fichier);
    }
     
    void afficheClientsFichier(Chaine nom)
    {
        FILE* fichier = NULL;
        char ligne[100] = "";
        Client c1;
     
        fichier = fopen("dataClients.txt", "r");
     
        if (fichier != NULL)
        {
            while (fgets(ligne, 100, fichier) != NULL) // On lit le fichier tant qu'on ne reçoit pas d'erreur (NULL)
            {
                if(strcmp(nom, c1.nom) == 0)
                {
                    printf("%s", ligne); // On affiche la chaîne qu'on vient de lire
                }
            }
     
            fclose(fichier);
        }
    }
     
    int main()
    {
        //ajouteClientFichier();
        afficheClientsFichier("Corentin");
        return 0;
    }
    Voici mon code mais lorsque je compile rien ne s'affiche, sachant que j'ai 5 clients enregistrés dont Corentin qui est en paramètre dans ma fonction

  2. #2
    Invité
    Invité(e)
    Par défaut
    (Re ) Bonsoir,

    Observe bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            while (fgets(ligne, 100, fichier) != NULL) // On lit le fichier tant qu'on ne reçoit pas d'erreur (NULL)
            {
                if(strcmp(nom, c1.nom) == 0)
    Tu lis ligne mais ne l'utilises pas. À la place tu compares nom à c1.nom, qui n'est à aucun moment initialisé.

    Vu que tu écris sous la forme fprintf(fichier, "\n%d %s", c1.id, c1.nom);, ta boucle devrait plutôt ressembler à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            while (fscanf(fichier, "%d %s", &c1.id, c1.nom) == 2) { ... }
    (== 2 pour le nombre de paramètres lus avec succès.)

    Note que ici comme pour la saisie, le & n'est pas nécessaire devant c1.nom, tableau implicitement convertible en pointeur vers son premier caractère.
    Au sein de la fonction ajouteClientFichier(), déplace le fclose(fichier); au sein du if (fichier != NULL) { ... }. Un appel de cette fonction avec NULL est un comportement indéfini (Undefined Behaviour).

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 152
    Billets dans le blog
    4
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void afficheClientsFichier(Chaine nom)
    {
        ...
        Client c1;
     
        ...
                if(strcmp(nom, c1.nom) == 0)
    c1 n'est jamais initialisé.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2021
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2021
    Messages : 9
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    FILE* fichier = NULL;
        char ligne[100] = "";
        Client c1;
     
        fichier = fopen("dataClients.txt", "r");
     
        if (fichier != NULL)
        {
            while (fscanf(fichier, "%d %s", &c1.id, c1.nom) == 2) // On lit le fichier tant qu'on ne reçoit pas d'erreur (NULL)
            {
                if(strcmp(nom, ligne) == 1)
                {
                    printf("%s", ligne); // On affiche la chaîne qu'on vient de lire
                }
            }
     
            fclose(fichier);
        }
    Voila ou j'en suis avec vos conseils mais toujours rien d'afficher à la compilation

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2021
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2021
    Messages : 9
    Par défaut
    Dans le if 0 pas 1 erreur de ma part

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. VS2010 et CRYSTALREPORT pas d'erreur mais rien ne s'affiche
    Par laurent1 dans le forum SAP Crystal Reports
    Réponses: 0
    Dernier message: 30/03/2012, 18h20
  2. Compilation normale mais rien ne s'affiche dans le main
    Par mecaplus dans le forum Débuter
    Réponses: 3
    Dernier message: 04/03/2011, 17h16
  3. [Carte graphique] Mon PC démarre, mais rien ne s'affiche
    Par maharam dans le forum Composants
    Réponses: 2
    Dernier message: 10/11/2010, 13h55
  4. Réponses: 3
    Dernier message: 07/06/2007, 19h26
  5. [VB.NET]Comment afficher 1 progressbar lors d'une lecture fichier ?
    Par evlp2004@hotmail.com dans le forum Windows Forms
    Réponses: 2
    Dernier message: 04/05/2006, 09h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo