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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    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
    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 éclairé
    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
    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 Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 784
    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.

  4. #4
    Membre expérimenté 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
    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 éclairé
    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
    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
    Membre à l'essai
    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
    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;
    }

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