Мой вопрос: в каком случае в стеке buf содержится более одного элемента?
никогда, buf может быть просто символом, он используется только для запоминания символа, размещенного сразу после числа, чтобы не потерять его
Код можно изменить, чтобы он не использовался:
/* getch: get a (possibly pushed-back) character */
int getch(void)
{
return getchar();
}
/* ungetch: push character back on input */
void ungetch(int c)
{
ungetc(c, stdin);
}
Компиляция и исполнение:
pi@raspberrypi:/tmp $ gcc pf.c
pi@raspberrypi:/tmp $ ./a.out
1 2 3 4 + + +
10
Или используя тот факт, что можно сохранить только один символ:
int SavedChar = EOF;
/* getch: get a (possibly pushed-back) character */
int getch(void)
{
if (SavedChar == EOF)
return getchar();
int r = SavedChar;
SavedChar = EOF;
return r;
}
/* ungetch: push character back on input */
void ungetch(int c)
{
SavedChar = c;
}
Компиляция и исполнение:
pi@raspberrypi:/tmp $ gcc pf.c
pi@raspberrypi:/tmp $ ./a.out
1 2 3 4 + + +
10