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".