Fgetc(fichier) ne marche pas [c]

Résolu
tygro -  
 tygro -
Bonjour,

Mon programme ne marche pas, il ne m'affiche pas a e y i mais il fais defillé le cmd sur une 50 ligne a peu pres et sa m'affiche a la place vers le millieu de ses 50 ligne " ?à ?"

Merci pour votre aide

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
FILE* fichier = NULL;
int caractereActuel = 0;

fichier = fopen("test.txt", "w+");
fprintf(fichier, "a e y i");
if (fichier != NULL)
{
caractereActuel = fgetc(fichier); // On initialise caractereActuel

// Boucle de lecture des caractères un à un
while (caractereActuel != EOF) // On continue tant que fgetc n'a pas retourné EOF (fin de fichier)
{
printf("%c", caractereActuel); // On affiche le caractère stocké dans caractereActuel
caractereActuel = fgetc(fichier); // On lit le caractère suivant
}

fclose(fichier);
}

return 0;
}

3 réponses

  1. loupius Messages postés 789 Statut Membre 148
     
    Fgetc(fichier) ne marche pas
    Oh si ! Mais tu travailles avec un flux, donc il ne faut pas oublier de (re)définir la valeur du pointeur de position.
    Voir ici.
    Bonne continuation.
    0
  2. tygro
     
    Dsl du retard mais le probleme c'est que je travaille sur windows, et je ne comprend pas se que tu as dit,

    Oh si ! Mais tu travailles avec un flux, donc il ne faut pas oublier de (re)définir la valeur du pointeur de position. 
    0
  3. tygro
     
    up
    0
    1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      mais le probleme c'est que je travaille sur windows
      Ce n'est pas un problème puisque le C est un langage portable.
      Le lien qu'il t'a donné s'applique donc également sur Windows.

      Pour l'explication :
      Tu ouvres le fichier en w+. Le fichier sera donc vide. Le Ensuite tu écris dedans "a e y i", très bien. Le problème est que si tu lis le fichier, tu liras les caractères après le "i", c'est à dire EOF.
      Il faudrait que tu réinitialises le pointeur de flux en début de fichier avec un rewind : http://www.linux-france.org/article/man-fr/man3/fseek-3.html
      Un simple rewind(fichier) juste après ton fprintf fera l'affaire.

      Cdlt,
      0
    2. tygro
       
      trop cool sa marche, ^^
      merci
      0