feof () и fscanf () перестают работать после сканирования байта 1b как символа. Это потому что это «ESC» в ascii? Что я могу сделать?
В настоящее время я пишу программу, которая обрабатывает файлы PPM (тип P6, а не P3). Проблема в том, что некоторые изображения имеют байт 0x1b, который, согласно таблице ascii, известен как «ESC».
Ниже в значительной степени мой код:
// все включает там,,, ...
int main(void)
{
FILE *finput;
int number[7];
char r, g, b;
finput = fopen("my.ppm", "r");
/*
The code where I read the P6 numRows numColumns 255\n
...Lets assume that part works well
*/
while(!feof(finput))
{
num[0] = fscanf(finput, "%c", &r); // the "num[] = " part is for debugging
num[1] = fscanf(finput, "%c", &g);
num[2] = fscanf(finput, "%c", &b);
printf("%d\n", num[0]);
printf("%d\n", num[1]);
printf("%d\n", num[2]);
}
return 0; //or whatever...
}
По какой-то причине fscanf начинает возвращать -1 после чтения байта 'ESC' (но тот, который читает его, не возвращает -1)
Таким образом, пример вывода будет:
1 -1 -1
С другой стороны, я прочитал «while (! Feof ()) всегда неправильно» и тот, что касается больших файлов с fscanf, но мои ppm-изображения не превышают 500x500 пикселей ...
Что я могу / должен сделать, чтобы продолжать читать?
Спасибо за помощь!