Этот код исходит из K & R. Я читал его несколько раз, но мне все еще кажется, что я не понимаю.Просьба пояснить этот пример C Код
#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.
- если да, то возвращают значение полукокса из Buf [- bufp].
- возвращение назад getchar().
Я хотел бы задать более конкретный вопрос, но я в буквальном смысле не знаю, как этот код достигает того, что он предназначен для достижения, поэтому мой вопрос: что такое (а) цель и (б) аргументация этого кода?
Заранее благодарен.
ПРИМЕЧАНИЕ: Для всех вентиляторов K & R, этот код можно найти на странице 79 (в зависимости от издания, я полагаю)
Тест внутри 'ungetch' должен, вероятно, включать' bufp' not 'printf' в его состояние. Наверное, это опечатка. –
У меня сейчас нет K & R, но я думаю, что в ungetch условие if должно быть 'bufp> = BUFSIZE' – kol
Извините, вероятно, моя ошибка. SOmeone исправил это сейчас, поэтому я не могу вспомнить, что я набрал в оригинале. –