入力ストリームへ一文字だけもどせるungetc関数
K&R本 7.8.3
ungetcを使うとgetchar等で取得した文字を一つだけ戻すことができます。
ためしに二つ進んで一つ戻す処理を書いてみます。
#include <stdio.h> int main (void) { int c; int i = 0; while( (c = getchar()) != EOF ) { printf("%c",c); if ( (i = (i+1) % 2) == 0 ) { ungetc(c,stdin); } } return 0; }
$ cat main.c | main ##iinncclluuddee <<ssttddiioo..hh>> iinntt mmaaiinn ((vvooiidd)) {{ iinntt cc;; iinntt ii == 11;; wwhhiillee(( ((cc == ggeettcchhaarr(()))) !!== EEOOFF )) {{ pprriinnttff((""%%cc"",,cc));; iiff (( ((ii == ((ii++11)) %% 22)) ==== 00 )) {{ uunnggeettcc((cc,,ssttddiinn));; }} }} rreettuurrnn 00;; }}
なんか目がおかしくなりそう(笑)
しかしこの関数、扱いが難しそうですね。一文字だけ戻したいという用途ってあるんでしょうか。