2 標準入出力

UNIXの世界では、一般的に、標準入力装置としてキーボード2が、標準出力装置としてディスプレイが割り当てられている。文字をキー ボードから、入力して、ディスプレイに書き出す方法を示す。

2.1 標準(キーボード)入力

2.1.1 getchar

まずは、キーボードから1文字を入力する「getchar」を紹介する。

getchar
機能		キーボードから1文字入力する。
ヘッダー		stdio.h 
形式		int getchar(void)
返却値		読み込んだ文字を返す。ファイル終了時は EOF を返す 
形式のところに書かれているvoidとは、実引数がないということを表して いる。voidを日本語に訳すと「空の」という意味になる。また、実引数というのは関 数の変数みたいなものである。この関数を使って、キーボードから入力された1文字を変 数hogeに格納するためには、次のように記述する。
	  int hoge;             /* 整数型の変数 */
	  hoge=getchar();       /* 代入 */
ここで、変数の型としてintを用いているが、charとしても何も問 題はない。c言語では、1文字は整数とほとんど同じように扱われる。また、以前も述べた ように、日本語のように2バイト文字は代入できないことに注意が必要である。この関数 と対になっているのが、後で述べる「putchar」である。

2.1.2 gets

次にキーボードから1行読み込む関数である。1行というのは、「Enter」キーが押 されるまでである。

gets
機能		キーボードから1行読み込み、hoge(配列)に格納
ヘッダー		stdio.h 
形式		char gets(char *hoge)
返却値		入力文字をそのまま返す。ファイル終了時、あるいはエラー のときはNULL を返す。 
この関数は、つぎのようにつかう。
	  char hoge[10];             /* 整数型の変数 */
	  gets(hoge);                /* 代入        */
この関数は便利で、最後の文字列の後に、ちゃんとその区切りの 「\0」が配列に入れられる。しかし、配列で確保された 文字数以上を入力すると、とんでもないこと3 が生じる可能性があり、使う場合 は気をつけなくてはならない。。そのため、コンパイラーによっては、「この 関数は、危険だから使うな」とメッセージを出すものもある。後でのべる 「fgets」で入力文字数を制限する方が良い。この関数と対になってい るのが、後で述べる「puts」である。

2.1.3 scanf

最後に説明するのが、おなじみの「scanf」である。

scanf 
機能		キーボードから文字列を読み込み、hoge(配列)に格納。
ヘッダー		stdio.h 
形式		int scanf("%s", hoge) 
返却値		通常、入力項目を返す。異常時はEOFを返す。 
この関数は次のように使う。
	  char hoge[10];             /* 整数型の変数 */
	  scanf("%s",hoge);             /* 代入 */                 
 
この関数は、空白を入力できないという問題を抱えている。なぜならば、空白は文字列の 区切りを示すので、そこで文字列が終わると判断されるからである。この関数と対になっ ているのが、おなじみの「printf」である。

2.1.4 fgetsを使う方法

どの関数にも問題があるが、もっとも良い方法は、「fgets」を使う方法である。 これは次のように書けば良い。
	  char hoge[10];             /* 整数型の変数 */
	  fgets(hoge,10,stdin);             /* 代入 */
これで、空白も入力できるし、10文字を越えても、メモリーの内容を破壊することは無い。 stdinと言うのは、standard inputの略で、標準入力(キーボード)を示す。

2.2 標準(ディスプレイ)出力

標準入力に対応した標準出力の命令がある。対応していると言っても、実際に は関係があるわけではないが、よく似ている命令なので覚えやすい。

2.2.1 putchar

まずは、ディスプレイに1文字を出力する「putchar」を説明する。

putchar 
機能 		ディスプレイに1文字出力する。
ヘッダー		stdio.h 
形式 		int putchar(int hoge) 
返却値		出力した文字を返す。異常時は EOF を返す 
この関数を使って、変数hogeに格納された文字を出力するためには、次のように記述する。
	  int hoge;             /* 整数型の変数 */
	  hoge=getchar();       /* 代入        */
	  putchar(hoge);        /* 1文字出力   */
putchar」でディスプレイに文字を書いた場合、改行の「\n」 は出力されない。改行したい場合は、もう1行余分にprintfなどを書かなくてはならない。

2.2.2 puts

もう予想がつくと思うが、次は「puts」である。

puts
機能		ディスプレイに文字列を出力後、改行する。
ヘッダー		stdio.h
形式 		int puts(char *hoge)
返却値		正常時は非負、異常時は EOF を返す。 
この関数は、つぎのようにつかう。
	  char hoge[10];             /* 整数型の変数 */
	  gets(hoge);                /* 代入        */
	  puts(hoge);                /* 1行出力     */
この関数は便利で、最後の文字列の後に、ちゃんとその改行「\n」が出力される。また、変換処理がないので、printf関数よりも処理が早い。

2.2.3 printf

最後は、もう説明する必要がないと思うが、printf関数である。

printf
機能 		変換書式に従いディスプレイに書き出す。
ヘッダー		stdio.h 
形式 		int printf("%s", hoge) 
返却値 		正常時は出力されたバイト数を返す。異常時は負の値を返す。 
この関数は次のように使う。
	  char hoge[10];             /* 整数型の変数    */
	  scanf("%s",hoge);          /* 代入           */
	  printf("%s",hoge);         /* ディスプレイ出力 */
 
もちろん、変換指定子のところに%cを使えば、文字列ではなく、1文字を扱うこと ができる。
ホームページ: Yamamoto's laboratory
著者: 山本昌志
Yamamoto Masashi
平成16年12月25日


no counter