標準入出力関数には第5章で説明した printf() や scanf() の他にも 下のように 1文字専用の入出力関数と 1行専用の入出力関数が用意されています。
尚、標準入出力関数を使用するには、#include <stdio.h> が必要です。
「#include」については「18-2.#include」 を参照してください。
キーボードから1文字入力
int ch1; char ch2 ch1 = getchar(); ---- ⇒どちらも一文字を入力します scanf("%c", &ch2); ----
※ この getchar()でも scanf()と同様に復改が残る現象が起こります。 注意してください。(2001.11.16追記)
画面に 1文字出力
int ch = 'A'; putchar(ch); ---- ⇒どちらも一文字を出力します printf("%c", ch); ----
#include <stdio.h> …必要 int main(void) { int stg; while ((stg = getchar()) != EOF) { …「Ctrl+Z が入力されるまで」 putchar(stg); という意味 } return 0; }
getchar()は入力が終了したときに上記のように「EOF」という値を返します。 この EOF は <stdio.h> の中で宣言されているのですが、その値は通常は「-1」です。 普通 char型は「-128〜127」の範囲を扱うのですが、0〜255で文字コードを扱う処理系では「0〜255」となり、この「-1」が扱えません。これに対し「int型」はどの処理系でも「-1」が扱えます。 ですから、どの処理系でも「EOF」が返せるように、getchar()は int型変数で値を受け取るのです。
尚、「Ctrl+Z」の入力については、6-8 もご参照ください。
キーボードから文字列を 1行入力
char str[256]; gets(str); ---- ⇒どちらも文字列を入力します scanf("%s", str); ----
※ gets() は「復改がくるまで」文字列を読込む:スペースを読込める scanf() は「復改やスペースなどの空白類文字がくるまで」文字列を読込む:スペースは読込めない
どうして文字列を入れる配列は十分な大きさをとる必要があるのでしょう。 余裕のある人は掲示板の書き込みを見てみましょう。(2002.03.23追記)
画面に文字列を出力して復改する
char str[] = "computer"; puts(str); ---- ⇒どちらも文字列を出力します printf("%s\n", str); ----
#include <stdio.h> …必要 int main(void) { char str[256]; EOFではないので注意が必要 ↓ while (gets(str) != NULL) { …「Ctrl+Z が入力されるまで」 puts(str); という意味 } return 0; }
※ 「NULL」は空ポインタ定数で一般に「ヌル」と呼ばれ、値は一般に「0」です (処理系によっては 0 ではない場合もあります)。 この NULL は本来返却されるはずのポインタが何らかの事情で返却されないときに用いられます。 ポインタについては第10章で説明しますが、ここでは、「Ctrl+Z」が入力されると、 文字列のポインタではなく空ポインタ定数の「NULL」が返却されることを理解しておいてください。
「初心者のためのポイント学習C言語」 Copyright(c) 2000-2004 TOMOJI All Rights Reserved