fgetc(),fputc()の悲劇ーー解決編 ― 2015年02月01日 21:48
前回紹介した、fputc(6,c)とputc(c),fgetc(5,c)とgetc(c)が交互に呼ばれると悲劇が起きます。 この原因はどこにあるでしょうか。
fputc(),putc()は、文字を書き出す前に、一行分の文字をため込みます。この書き出しバッファーは、 fputc()とputc()でそれぞれ独立しています。そのため、出力が分かれてしまい、別々に書き出されてしまいます。
fgetc(5,c),getc(c)も同様で、読み出しバッファーが独立しているため、読み出し順序が入力元の順書と違ってしまいます。
これを解決する、もっとも簡単な方法は、putc()はfputc()を呼び出して実現し、getc()はfgetc()を呼び出して実現することです。
新しいgetc(),putc()は以下の通り。
c getc3.for -- (extended version) get character from standard input integer*1 function getc(c) integer*1 c integer*1 fgetc getc = fgetc(5,c) return end
c putc4.for (extended version 2)-- put sharacter on standard output subroutine putc(c) integer*1 c call fputc(6,c) return end
最近のコメント