Пожалуйста Объясните этот пример кода C

Этот код предоставлен K&R. Я читал его несколько раз, но, похоже, он все еще ускользает от моего понимания.

#define BUFSIZE 100

char buf[BUFSIZE];
int bufp = 0;

int getch(void)
{
      return(bufp>0)?buf[--bufp]:getchar();
}

int ungetch(int c)
{
      if(bufp>=BUFSIZE)
            printf("too many characters");
      else buf[bufp++]=c;
}

По словам K&R, цель этих двух функций - предотвратить чтение программой слишком большого количества вводимых данных. то есть без этого кода функция не сможет определить, что она прочитала достаточно данных, не прочитав слишком много сначала. Но я не понимаю, как это работает.

Например, рассмотрим getch (). Насколько я могу судить, это следующие шаги:

  1. проверить, больше ли bufp, чем 0.
  2. если да, то вернуть char значение buf [- bufp].
  3. иначе вернуть getchar ().

Я хотел бы задать более конкретный вопрос, но я буквально не знаю, как этот код достигает того, для чего он предназначен, поэтому мой вопрос: какова (а) цель и (б) обоснование этого кода ?

Заранее спасибо.

ПРИМЕЧАНИЕ. Для всех поклонников K&R этот код можно найти на странице 79 (полагаю, в зависимости от вашей версии)

5
задан Fred Foo 14 December 2011 в 14:05
поделиться