Этот код предоставлен 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 (). Насколько я могу судить, это следующие шаги:
Я хотел бы задать более конкретный вопрос, но я буквально не знаю, как этот код достигает того, для чего он предназначен, поэтому мой вопрос: какова (а) цель и (б) обоснование этого кода ?
Заранее спасибо.
ПРИМЕЧАНИЕ. Для всех поклонников K&R этот код можно найти на странице 79 (полагаю, в зависимости от вашей версии)