Как получить последний символ на getchar ()! = EOF - PullRequest
0 голосов
/ 14 февраля 2019

Есть ли способ получить последний элемент перед EOF при использовании getchar()?

Например, у меня есть текст "Эй, люди"

Какое условие проверитьпоследний символ в этом тексте (в нашем примере е).Мои мысли следующие, но я не уверен, какое должно быть условие if.

//pseydocode

int c;
while(c=getchar() != EOF)
    if(c==EOF-1) //assuming EOF is the end EOF -1 would be the last  character.
        if(c==O) print O;
        else if(c==P) print P;
        else if (c==e) print e;

Я хочу проверить самый последний символ и, если это определенная буква, напечатать его.

Спасибо.

Ответы [ 3 ]

0 голосов
/ 14 февраля 2019

Вы должны написать код, чтобы запомнить последний символ (если он вообще есть) перед EOF.

int c;
int lc = EOF;
while((c=getchar()) != EOF) {
   lc = c;
}

//here lc will hold the last character read before EOF,
//or it will also be EOF if no characters got read at all.

Обратите внимание, что ваше первоначальное условие было while(c=getchar() != EOF), что неверно - оно оценивается какwhile(c=(getchar() != EOF)), вы должны написать while((c=getchar()) != EOF

0 голосов
/ 14 февраля 2019
char c; 
int tmp = 0; 
while(tmp != EOF) 
{ 
  c = (char)tmp; 
  tmp=getchar(); 
} 

c становится 0 (нулевой терминатор) в случае пустого ввода, в противном случае это последний символ перед EOF.

0 голосов
/ 14 февраля 2019

Нет никаких признаков того, что символ, только что возвращенный из 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...