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 пикселей ...

Что я могу / должен сделать, чтобы продолжать читать?

Спасибо за помощь!

Ответы на вопрос(1)

Ваш ответ на вопрос