[C] Fichiers et EOF

Fichiers et EOF [C] - Programmation

Marsh Posté le 13-03-2001 à 23:20:15    

Bonsouaaaaaar tout le monde, me revoila avec cette fois si un soucis avec les fichiers. Voici le code :
 
#include<stdio.h>
#include<alloc.h>
#include<string.h>
#include<conio.h>
 
 
void listing (FILE* nom);
 
void main()
 {
   FILE*   fichier;
   int     i=0,j=0;
   char*   nom_fichier = (char*)malloc(sizeof(char));
   char    chaine[255];
   long    curpos;
 
 
 
   printf("Nom du fichier : \n\n" );
   gets(nom_fichier);
 
   fichier = fopen(nom_fichier,"w" ); // on ouvre le fichier
 
   if ( fichier == NULL ) printf("\nErreur de création du fichier %s ", nom_fichier);
 
   while ( j <= 4 )
    {
      highvideo();
      cprintf("\nEntrer une chaine de caractere quelconque :\n" );
      gets(chaine);
      fprintf(fichier,"%s\n",chaine);
      j++;
      }
 
   fputc(26,fichier); // la je rajoute pas EOF ?
   listing(fichier);
   fclose(fichier); // on ferme le fichier
 
   }
 
 
void listing (FILE* nom)
 {
   char rep;
 
   while ( feof(nom) == 0 )
    {
      rep = fgetc(nom);
      printf("%c",rep);
      }
   }
 
Je ne comprends pas pourquoi je n'ai pas de caractere de fin de fichier, pourtant je le rajoute non ?

Reply

Marsh Posté le 13-03-2001 à 23:20:15   

Reply

Marsh Posté le 13-03-2001 à 23:40:57    

Je dis que je n'ai pas de caractere de fin de fichier car je boucle à l'infini ds ma fonction listing.

Reply

Marsh Posté le 13-03-2001 à 23:43:55    

le caractere de fin de fichier... tu peux pas le rajouter... :lol:

Reply

Marsh Posté le 13-03-2001 à 23:52:40    

bon, plus serieusement...
Le caractere de fin de fichier 'EOF', bah... c pour simplifier une sorte de flag ki se met a true qd tes a la fin du fichier... t'a pas a le gerer ...
 
Dans mes souvenirs, une condition en C est vrai si elle vaut zero, non ?
donc, en principe ta boucle bah.. elle sert pas a grd chose ici... puisque tu ecris qqchose dans ton fichier...
En d'autres termes, tu rentres jamais dedans !!!
Et si ton fichier est vide, ben elle devient une boucle infinie !!!! Tu vois le truc ?!
Bref, fo voir ce ke te retourne le feof()...
Il me semble kelle te retourne vrai si tes en fin de fichier (FileEndOfFile) et fo sinon...
Donc change ta condition du while pour voir...

Reply

Marsh Posté le 13-03-2001 à 23:59:08    

feof retourne zero lorsque la fin de fichie n'est pas atteinte.
 
Mais avec fprintf, le caractere de fin de chaine n'est pas rajouté.

Reply

Marsh Posté le 14-03-2001 à 00:05:29    

Je dirais que normalement, le fait de fermer le fichier ajoute ce qu'il faut pour qu'il y ait une fin de fichier. Donc ferme ton fichier d'abord, puis rouvres-le en lecture seule ensuite.
 
Evadream> Juste pour le style... De façon abstraite, une fonction endOfFile() doit renvoyer un booléen. En C, c'est parce qu'il n'y a pas de type booléen que feof() renvoie un entier. Mais dans ton code, c'est plus joli d'écrire "while (!feof(file)) ..." que "while (feof(file) == 0) ...".
 
Et puis "FILE* nom", ça fait un peu bizarre. Parce qu'en voyant une variable qui s'appelle "nom", j'aurais plutôt dit que c'était une variable de type string... (qui contenait un nom, quoi)

Reply

Marsh Posté le 14-03-2001 à 00:08:49    

Je note tout ca, et je vois ca demain :)
Je suis trop mort.
 
Bonne nuit @ tous !

Reply

Marsh Posté le 14-03-2001 à 05:19:48    

pour lire un fichier jusqu'à la fin je fais toujours:
 
while (!feof(Fichier))
{
   fgets(...
   ...
}
 
je sais pas si ca peut t'aider mais bon....

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed