このコードは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;
}
これら2つの関数の目的は、そのK & Rが言う、あまりにも多くの入力を読んでからプログラムを防ぐためです。すなわち、このコードがなければ、関数は最初にあまり読み過ぎないと十分なデータを読み取ったと判断できないことがあります。しかし、私はそれがどのように機能するのか分かりません。
たとえば、getch()を考えてみましょう。 【 - bufpに】それではBUF用のchar値を返す場合bufpには0
- チェック: は、私の知る限り、これを見ることができるようにそれが取る工程です。
- else getchar()を返します。
私は具体的な質問をしたいと思っていますが、私は文字通りこのコードがどのように達成しようとしているのかを知っていません。このコードの?
ありがとうございます。
注:任意のK & Rファンのために、このコードは79ページで見つけることができます(あなたのエディションによって、私は考えます)
'ungetch'の内部のテストでは、おそらく' bufp'が 'printf'の条件に含まれるべきです。私はそれがタイプミスだと思う。 –
私はK&Rを手にしていませんが、ungetchではif条件が 'bufp> = BUFSIZE'であるべきだと思います。 – kol
申し訳ありません、おそらく私の間違いです。 SOmeoneは今修正しているので、私が入力したものを覚えていない。 –