Bonjour, je perd du temps pour un problème que je n'arrive pas à comprendre, j ai googler en vain sans résultat.... donc je m en remet à vous

Je travaille sur windows2000 avec Dev-C++.
C'est pour faire marcher un programme de codage de Huffmann que j'essaie de cerner/corriger ce bug (ce n'est pas important de le savoir)

Donc le bug c'est lorsque l'on fait fgetc(F) avec F (fichier ouvert en lecture) qui se situe juste avant le char 26 qui est SUB. Normalement, je m'attend à ce que le fgetc(F) renvoie 26... mais hélas il renvoie EOF .
Il se peut que ce problème n'existe pas avec Unix....
Quoiqu'il en soit, le code ci-dessous éxécuté chez moi montre qu'à la tentative de lecture du char 26, fgetc renvoie EOF ...
Donc pourquoi? Comment corriger ce bug ?

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
28
 
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
 
int main (void)
{
 /* preuve du bug que fgetc renvoie EOF si il doit lire le char 26 (SUB)  :( */
FILE * F;
int e;
 
if ((F = fopen("test.txt","w")) == NULL) printf("erreur d ouverture!\n");
if (fputc(54,F) == EOF) printf("erreur d ecriture!\n");
if (fputc(26,F) == EOF) printf("erreur d ecriture!\n");
if (fputc(52,F) == EOF) printf("erreur d ecriture!\n");
if (fclose(F) == EOF) printf("erreur de fermeture!\n");
 
if ((F = fopen("test.txt","r")) == NULL) printf("erreur d ouverture!\n");
if ((e = fgetc(F)) == EOF) printf("impossible de lire le fichier!\n");
else printf("caractere lu: int: %d char: %c\n",e,e);
if ((e = fgetc(F)) == EOF) printf("impossible de lire le fichier!\n"); /* impossible */
else printf("caractere lu: int: %d char: %c\n",e,e);
if ((e = fgetc(F)) == EOF) printf("impossible de lire le fichier!\n");
else printf("caractere lu: int: %d char: %c\n",e,e);
if (fclose(F) == EOF) printf("erreur de fermeture!\n");
 
while(1);
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
qui à l'éxécution donne:
caractere lu: int: 54 char: 6
impossible de lire le fichier!
impossible de lire le fichier!