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 :

Problèmes avec fgetc et fgets


Sujet :

C

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 55
    Points : 30
    Points
    30
    Par défaut Problèmes avec fgetc et fgets
    Bonjour,

    Je suis débutant en c et je suis actuellement un cours sur internet, maintenant j'en suis au chapitre sur le traitement des fichier (lecture et écriture).
    Mon problème est le suivant:

    en voulant tester des bouts de code assez simples, je ne recois pas le résultat escompté.

    Par exemple:
    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
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(int argc, char *argv[])
    {
        int chaine;
     
        FILE* fichier = NULL;
     
        fichier = fopen("test.txt", "r");
        if (fichier != NULL)
        {
            chaine = fgetc(fichier);
            printf("%c", chaine);
            fclose(fichier);
        }
        else
        printf("Le fichier n'a pu etre ouvert");
     
        return 0;
    }
    Ne renvois rien, alors que j'ai le caractère 'A' d'écrit dans mon fichier test.txt.

    Ou encore:

    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
    #include <stdio.h>
    #include <stdlib.h>
    #define TAILLE_MAX 1000 // Tableau de taille 1000
     
    int main(int argc, char *argv[])
    {
        FILE* fichier = NULL;
        char chaine[TAILLE_MAX] = ""; // Chaîne vide de taille TAILLE_MAX
     
        fichier = fopen("test1.txt", "r");
     
        if (fichier != NULL)
        {
            fgets(chaine, TAILLE_MAX, fichier); // On lit maximum TAILLE_MAX caractères du fichier, on stocke le tout dans "chaine"
            printf("%s", chaine); // On affiche la chaîne
     
            fclose(fichier);
        }
     
        return 0;
    }
    qui me renvois un caractère bizarre et le premier caractère de la chaine, alors que dans mon test1.txt j'ai cette chaine:
    "Ceci est une chaine."

    Et enfin, le seul code où fgetc fonctionne:

    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
    #include <stdio.h>
    #include <stdlib.h>
    #define TAILLE_MAX 1000 // Tableau de taille 1000
     
     
    int main(int argc, char *argv[])
    {
        FILE* fichier = NULL;
        int caractereActuel = 0;
     
        fichier = fopen("test1.txt", "r");
     
        if (fichier != NULL)
        {
            // Boucle de lecture des caractères un à un
            do
            {
                caractereActuel = fgetc(fichier); // On lit le caractère
                printf("%c", caractereActuel); // On l'affiche
            } while (caractereActuel != EOF); // On continue tant que fgetc n'a pas retourné EOF (fin de fichier)
     
            fclose(fichier);
        }
     
        return 0;
    }
    Qui me renvois " C e c i e s t u n e c h a i n e . " avec un caractère bizarre avant le premier 'c'.
    Vous noterez que cette fois des espaces ont été ajoutés entre chaque caractère alors qu'il ne lui est demandé nulle part de faire ça.

    Quelqu'un aurait une idée de où peut provenir le problème, car je suis coincé depuis des heures à cette étape du cours sans pouvoir passer à autre chose.

    Merci

  2. #2
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Je ne vois rien d'anormal et les trois codes fonctionnent chez moi correctement
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  3. #3
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 55
    Points : 30
    Points
    30
    Par défaut
    Merci pour ta réponse.
    En fait j'ai réglé le problème en créant un nouveau test.txt et les problèmes ont disparu.
    Je ne sais pas d'où venait le problème, en tout cas il m'a vraiment fait perdre beaucoup de temps.
    Le seul avantage c'est que j'ai apprit ces bouts de code par coeur, à force de les regarder à la recherche d'erreurs

  4. #4
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Très probablement, le fichier d'origine était encodé en UTF16.
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

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

Discussions similaires

  1. Problème avec stdin dans fgets
    Par gaetan24430 dans le forum Débuter
    Réponses: 10
    Dernier message: 23/01/2009, 17h03
  2. [MySQL] Problème avec la fonction fgets et les retours chariot
    Par didoulive dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 20/02/2008, 19h08
  3. Problème avec fgets
    Par fabpeden dans le forum C
    Réponses: 13
    Dernier message: 15/05/2007, 10h25
  4. problème avec fgets
    Par salseropom dans le forum C
    Réponses: 1
    Dernier message: 03/08/2006, 14h54
  5. Problème avec fgets et tube...
    Par tchingoo dans le forum POSIX
    Réponses: 5
    Dernier message: 22/08/2003, 17h03

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