このコードは 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 によると、これら 2 つの関数の目的は、プログラムが大量の入力を読み取らないようにすることです。つまり、このコードがないと、関数は、最初に読みすぎない限り、十分なデータを読み込んだかどうかを判断できない可能性があります。しかし、私はそれがどのように機能するのか理解していません。
たとえば、getch() について考えてみましょう。私が見る限り、これはそれが取るステップです:
- bufp が 0 より大きいかどうかを確認します。
- その場合、buf[--bufp] の char 値を返します。
- それ以外の場合は getchar() を返します。
より具体的な質問をしたいのですが、このコードが意図したことをどのように達成するのか文字通りわからないので、私の質問は次のとおりです:(a)目的と(b)このコードの理由は何ですか?
前もって感謝します。
注: K&R ファンの場合、このコードは 79 ページにあります (エディションによって異なります)。