Нет никаких признаков того, что символ, только что возвращенный из getchar
, является последним доступным символом.Чтобы напечатать последний символ перед EOF
, вы должны запомнить возврат от getchar
.Когда возвращается EOF
, выведите на печать ранее запомненный символ.
Например, этот код печатает последний символ потока:
#include <stdio.h>
int main(void)
{
int c, previous = EOF;
while (1)
{
c = getchar();
if (c == EOF)
break;
previous = c;
}
if (previous == EOF)
printf("There were no characters in the stream.\n");
else
printf("The last character was %c.\n", previous);
}
Когда вы попробуете выше, выВероятно, последним символом будет символ новой строки, '\n'
.
В общем случае реализация C не может знать, что только что возвращенный символ является последним символом.Например, ввод может происходить из терминала, и пользователь только что набрал символ, который возвращает getchar()
.На данный момент мы не знаем, что пользователь будет делать дальше - они могут ввести другой символ или они могут ввести и указание конца файла (как при двойном нажатии на control-D в системе Unix).Итак, только что получив персонажа, мы не знаем, будет ли следующий персонаж другим персонажем или это EOF
.