Поведение EOF в функциях ввода в Си
Ричард Молотов

Вопрос не столь важный,но просто любопытно.
Я новичек.Си учу по книжке.Пока что могу создать проги только в консоли(если это так называется).Так вот, вопрос: почему используя функции на подобии fgets() и getchar() , EOF воспринимается только тогда, когда он является первым символом в строке ввода? Может это индивидумальное требование моей системы?

fgets() считывает символы до символа новой строки. Поведение этой функции в моей системе таковое, что
** Eсли EOF является первым символом в строке ввода, то функция fgets() очистит буффер, не сохранит значение (-1) по заданому адресу, и прекратит дальнейшее считывание.**
** Eсли EOF не является первым символом в строке ввода, то функция fgets() сохранит все символы перед EOF по заданому адресу, когда наткнется на символ EOF - не сохранит его значение, очистит буффер и предложит новый ввод данных(по тому же адресу) с того места, на котором остановилась сохранение ввода.**

Предложение на новый ввод понятно почему поступает ( ибо не наткнулось на символ новой строки ).

Не помню точно, но возможной причиной может быть то, что getchar(), каким то неведаным мне образом, модернизирует переменную типа char(-128 ... 127) в unsigned char(0 ... 255) для восприятия расширеной таблицы ASCII, и после сохранения символа - трансформируется обратно в char. EOF имеет значение -1 , потому и не может правильно восприйняться... Но по видимому, первый символ во вводе сначала просматривается типом char, а потом еще раз этот символ( и все символы в дальнейшей строке ввода), но уже unsigned char. Не уверен.

Прошу поделиться информацией тех, кто ею владеет. :)

0 чел.