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