fgetc() не останавливается в EOF

Попытался посмотреть на форумах, но не смог восстановить.

Я пытаюсь читать из текста. Текст: "К б"

Но при использовании fgetc() EOF не достигается, и в конце я получаю сэмплы '\n' и затем бесконечность 'y'.

Вот мой код:

Node* getBinTree(FILE *fsrc){
    Node* root=NULL;
    unsigned char tmp=NULL;
    while ((tmp=fgetc(fsrc))!=EOF)
        globalArray[tmp]++;
    return root;

}

большое спасибо

3 ответа

Решение

Беда у вас связана с тем, что fgetc возвращается. Тип возврата int но вы храните его в unsigned char,

Вы должны либо изменить это, чтобы быть int или, в качестве альтернативы, использовать feof проверить состояние конца файла.

Использование int tmp, EOF не может быть сохранен в символе, потому что это не символ.

Функция fgetc() возвращает целое число со знаком, но ваша программа сохраняет результат в неподписанном символе. При преобразовании типов со знаком в типы без знака отрицательное число (EOF часто определяется как -1) становится положительным (в данном случае десятичное значение 256), поэтому, если EOF отрицательно, сравнение возвращаемого значения с EOF всегда будет возвращать false, Чтобы исправить код, измените объявление "tmp" с "unsigned char" на "int".

Другие вопросы по тегам