UNIXの世界では、一般的に、標準入力装置としてキーボード
2が、標準出力装置としてディスプレイが割り当てられている。文字をキー
ボードから、入力して、ディスプレイに書き出す方法を示す。
まずは、キーボードから1文字を入力する「
getchar」を紹介する。
getchar
機能 キーボードから1文字入力する。
ヘッダー stdio.h
形式 int getchar(void)
返却値 読み込んだ文字を返す。ファイル終了時は EOF を返す
形式のところに書かれている
voidとは、実引数がないということを表して
いる。voidを日本語に訳すと「空の」という意味になる。また、実引数というのは関
数の変数みたいなものである。この関数を使って、キーボードから入力された1文字を変
数
hogeに格納するためには、次のように記述する。
int hoge; /* 整数型の変数 */
hoge=getchar(); /* 代入 */
ここで、変数の型として
intを用いているが、
charとしても何も問
題はない。c言語では、1文字は整数とほとんど同じように扱われる。また、以前も述べた
ように、日本語のように2バイト文字は代入できないことに注意が必要である。この関数
と対になっているのが、後で述べる「
putchar」である。
次にキーボードから1行読み込む関数である。1行というのは、「
Enter」キーが押
されるまでである。
gets
機能 キーボードから1行読み込み、hoge(配列)に格納
ヘッダー stdio.h
形式 char gets(char *hoge)
返却値 入力文字をそのまま返す。ファイル終了時、あるいはエラー のときはNULL を返す。
この関数は、つぎのようにつかう。
char hoge[10]; /* 整数型の変数 */
gets(hoge); /* 代入 */
この関数は便利で、最後の文字列の後に、ちゃんとその区切りの
「
\0」が配列に入れられる。しかし、配列で確保された
文字数以上を入力すると、とんでもないこと
3 が生じる可能性があり、使う場合
は気をつけなくてはならない。。そのため、コンパイラーによっては、「この
関数は、危険だから使うな」とメッセージを出すものもある。後でのべる
「
fgets」で入力文字数を制限する方が良い。この関数と対になってい
るのが、後で述べる「
puts」である。
最後に説明するのが、おなじみの「
scanf」である。
scanf
機能 キーボードから文字列を読み込み、hoge(配列)に格納。
ヘッダー stdio.h
形式 int scanf("%s", hoge)
返却値 通常、入力項目を返す。異常時はEOFを返す。
この関数は次のように使う。
char hoge[10]; /* 整数型の変数 */
scanf("%s",hoge); /* 代入 */
この関数は、空白を入力できないという問題を抱えている。なぜならば、空白は文字列の
区切りを示すので、そこで文字列が終わると判断されるからである。この関数と対になっ
ているのが、おなじみの「
printf」である。
どの関数にも問題があるが、もっとも良い方法は、「
fgets」を使う方法である。
これは次のように書けば良い。
char hoge[10]; /* 整数型の変数 */
fgets(hoge,10,stdin); /* 代入 */
これで、空白も入力できるし、10文字を越えても、メモリーの内容を破壊することは無い。
stdinと言うのは、standard inputの略で、標準入力(キーボード)を示す。
標準入力に対応した標準出力の命令がある。対応していると言っても、実際に
は関係があるわけではないが、よく似ている命令なので覚えやすい。
まずは、ディスプレイに1文字を出力する「
putchar」を説明する。
putchar
機能 ディスプレイに1文字出力する。
ヘッダー stdio.h
形式 int putchar(int hoge)
返却値 出力した文字を返す。異常時は EOF を返す
この関数を使って、変数
hogeに格納された文字を出力するためには、次のように記述する。
int hoge; /* 整数型の変数 */
hoge=getchar(); /* 代入 */
putchar(hoge); /* 1文字出力 */
「
putchar」でディスプレイに文字を書いた場合、改行の「
\n」
は出力されない。改行したい場合は、もう1行余分に
printfなどを書かなくてはならない。
もう予想がつくと思うが、次は「
puts」である。
puts
機能 ディスプレイに文字列を出力後、改行する。
ヘッダー stdio.h
形式 int puts(char *hoge)
返却値 正常時は非負、異常時は EOF を返す。
この関数は、つぎのようにつかう。
char hoge[10]; /* 整数型の変数 */
gets(hoge); /* 代入 */
puts(hoge); /* 1行出力 */
この関数は便利で、最後の文字列の後に、ちゃんとその改行「
\n」が出力される。また、変換処理がないので、
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日