プログラミング言語 C

文字の入出力全般について、

・ テキストの入力あるいは出力は、それがどこで発生したか あるいはどこに出力するかにはよらずに*1、文字のストリーム(流れ)として扱われる。

・ テキストストリームとは ごとに分割された 文字の連なり*2である。各行は ゼロまたはそれ以上の個数の文字列の最後に 改行記号がついた形をとる。(p19)

↑fgets() や fputs() のことですネ。

標準ライブラリには 一度に1つの文字を読み書きする関数が用意されている。(←getchar() や putchar() のこと)

・ getchar() と putchar() があれば、(標準)入出力について それ以外 何も知らなくても、役に立つプログラムを かなりたくさん書くことができる。(p19)

つぎは getchar() の返り値が なぜ int型 なのか、

・ キーボードや画面上で文字として扱われるものは 他のすべてのデータと同じく、内部的には 単にビットパターンとして格納される。

文字データの格納には 特に char型が設けられているが、任意の整数型も使える。この int型を (getchar で使うのには) 微妙だが重要な理由がある。

・ getchar() が返す任意の*3を保持するためには、十分大きなデータ型宣言しなければならない。

・ それには 任意の char(文字) に加えて、入力の終りを示す EOF*4も保持するに 十分な大きさでなければならないから、char型(←1バイト)では不可能なので、int型を使うのである。(p20)

  1. main()
  2. {
  3. int c; /* 返り値は int型 */
  4. while ((c = getchar()) != EOF) {
  5. putchat();
  6. }
  7. }

・ このプログラムでは 文字を一つとって c に代入した後、その文字が ファイルの終わりかどうか while で調べている。

・ EOF でなければ while の構成文が実行され 文字がプリントされる。同様に while が繰り返され、入力の終わりにくると while は終了し、したがって main() も終了する。

・ 上のプログラムでは 入力を1つの行にまとめている - getchar() の呼出しが 1箇所だけ - から 短くなっている。

・ できたプログラムは より簡潔になり、この慣用句をマスターしてしまえば 読みやすくもなる。

・ ただし 使いすぎると 逆に わかりにくいプログラムになってしまうので 注意。(p21)

*1:通例、入出力関数の「引数」で指定する

*2:←ストリング ?

*3:←入力した文字の

*4:←End of File、値は -1