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 et écriture


Sujet :

C

  1. #1
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Lecture et écriture
    Bonjour, je suis dans la partie lecture-ecriture en langage C, j'aimerais savoir pourquoi la console n'affiche pas mon texte ? Voici mon code source :

    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
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(void)
    {
        FILE* fichier = NULL;
        int caractereActuel = 0;
     
        fichier = fopen("test.txt", "r+");
        if (fichier != NULL)
     
        {
            fputc('B',fichier);
     
            do{
                caractereActuel = fgetc(fichier);
                printf("%c\n", caractereActuel);
             }while (caractereActuel!=EOF);
        }
     
        else { printf ("Erreur\n"); }
        fclose(fichier);
        return 0;
     
    }



    Merci d'avance pour votre aide

  2. #2
    Membre éprouvé
    Avatar de EpiTouille
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 372
    Points : 917
    Points
    917
    Par défaut
    Premiere chose, quand j'execute ton code chez moi, j'ai un erreur suivi de segfault
    surement parce que tu passes NULL à fclose

    Ton erreur vient du faire que apres avoir écris, ton "curseur" se retrouve à la fin du fichier donc après le "B".
    La seconde erreur est que tu affiches le "EOF"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     do {
              caractereActuel = fgetc(fichier);
              printf("%c\n", caractereActuel);
         }while (caractereActuel!=EOF);
    Que ce passe t'il ici si dans ta boucle, caractereActuel = EOF ?
    Tu l'affiches juste après.

    La solution est de revenir au debut du fichier après l'écriture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fseek(fichichier, 0, SEEK_SET);
    Ou de faire 2 "passes", une pour l'ecriture, une pour la lecture.
    Bon courage

    Edit: Il faudrai également prendre l'habitude d'utilisée la sortie d'erreur pour afficher ses messages d'erreurs. (Ansi que faire des messages plus explicites)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fprintf(stderr, "Une erreur est survenue lors de l\'ouverture du fichier : test.txt\n");

  3. #3
    Membre expérimenté Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    625
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 625
    Points : 1 564
    Points
    1 564
    Par défaut
    Hello,

    Juste pour signaler que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fseek(fichichier, 0, SEEK_SET);
    revient à écrire Edgar.
    On écrit "J'ai tort" ; "tord" est la conjugaison du verbre "tordre" à la 3ème personne de l'indicatif présent

  4. #4
    Membre actif Avatar de moins1
    Homme Profil pro
    Autre
    Inscrit en
    Février 2013
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Autre
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2013
    Messages : 85
    Points : 222
    Points
    222
    Par défaut
    Pour afficher les erreurs, au lieu de fprintf(stderr, "", ""), on peut utiliser perror(). C'est plus pratique il me semble.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if(!fichier)
    {
        perror("Erreur: ");
    }
    La fonction va afficher "Erreur: " suivi du message d'erreur qui est survenue. Les fonctions standards (toutes?) assigne à une variable spéciale, errno, un code d'erreur lorsque survient une erreur. perror() affiche le message texte correspondant à ce code. Si il y'a un autre appel à une fonction entre temps, le code va changer. Donc faut l'utiliser juste après la fonction à tester. Le message est en anglais cependant.


  5. #5
    Membre éprouvé
    Avatar de EpiTouille
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 372
    Points : 917
    Points
    917
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Pour afficher les erreurs, au lieu de fprintf(stderr, "", ""), on peut utiliser perror(). C'est plus pratique il me semble.
    Oui, tu as raison, ça m'est sortit de la tête quand j'écrivais ce message.

    Après, le cas rewind à déjà été traité dans pas mal de thread comme celui ci : http://www.geeksforgeeks.org/g-fact-82/

  6. #6
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    J'ai rajouté le fseek juste après l'écriture mais sa marche pas. Voici mon code :

    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
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(void)
    {
        FILE* fichier = NULL;
        int caractereActuel = 0;
     
        fichier = fopen("test.txt", "r+");
        if (fichier != NULL)
     
        {
     
     
            fputc('B',fichier);
        }
     
    fseek(fichier, 0, SEEK_SET);
     
            do{
                caractereActuel = fgetc(fichier);
                printf("%c\n", caractereActuel);
             }while (caractereActuel!=EOF);
     
     
        return 0;
    }

  7. #7
    Membre actif Avatar de moins1
    Homme Profil pro
    Autre
    Inscrit en
    Février 2013
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Autre
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2013
    Messages : 85
    Points : 222
    Points
    222
    Par défaut
    Euh!

    Si fichier n'est pas nul tu fais un fputc() et c'est tout. Paf tu ferme la parenthèse et là tu fais un fseek() et d'autres appels à fichier. Et si il est nul fichier?

    Si ton fichier n'existe pas, r+ ne crée pas de fichier. Utilise plutôt a+. man fopen()

    Sinon quand ton fichier existe, ben il fonctionne ton programme. Fais 3 ou 4 fputc() dans ton if() et tu va t'en rendre compte.

    Y'a aussi la structure de ton programme et l'indentation qui ne vont pas bien, sont plutôt souffrant quoi.

    Sinon tu ne ferme pas ton fichier avec fclose()


  8. #8
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    J'ai retesté le meme programme et il fonctionne ^^. Merci beaucoup

Discussions similaires

  1. Lecture et écriture de blocs
    Par incognito86 dans le forum C
    Réponses: 10
    Dernier message: 18/02/2007, 16h35
  2. [Applet] Sécurité lecture et écriture
    Par ZeKiD dans le forum Applets
    Réponses: 1
    Dernier message: 18/08/2006, 11h17
  3. [VB6] lecture et écriture de fichier
    Par robert_trudel dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 12/06/2006, 14h06
  4. [VB.NET]Problème de lecture et écriture sur fichier texte
    Par zouhib dans le forum Windows Forms
    Réponses: 25
    Dernier message: 23/05/2006, 15h30
  5. Ouvrir un fichier texte en lecture ET écriture
    Par Steph12 dans le forum C++
    Réponses: 12
    Dernier message: 17/06/2005, 08h08

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