第四章 getchar,putchar


getchar と putchar
半角の1文字を入出力します。つまり、日本語は扱えません。

<getchar,putchar>
#include<stdio.h>
main()
{
    int c;
    printf("何かアルファベットを入力してください(c以外)\n");
    c=getchar();     /* 入力された文字を箱cに入れています */
    printf("あなたが入力したアルファベットは");
    putchar(c);       /* 箱cに入っている文字を画面に表示します */
    printf("です\n");
    putchar('c');      /* 文字 c を画面に表示します */
    printf("ではありません\n");
}
<実行結果>
何かアルファベットを入力してください(c以外)
a
あなたが入力したアルファベットはaです
cではありません

まず getchar ですが、getchar() の () の中には何も書いてはいけません。
第十二章 関数”まで勉強すると、() の中に何も書かない理由がわかるようになるので、
今はそういうものだと覚えておいてください。

putchar(c); で、箱 c の中身を画面に表示しています。
putchar('c'); では、箱 c の中身ではなく、文字 c そのものを画面に表示します。                        
後の方は () 内の c が ' ' で囲まれていることに注意してください。

ここで、なんで文字を入力するのに int を使うんだ?と思った人もいるでしょう。
これには、ちゃんと理由があります。


getchar,putcharが int である理由                                                                                                 
これは、何回入出力するか決まっているようなとき、
つまり、getchar putchar の使う回数が決まっている場合には、char 型で問題ないのですが、        

入出力する回数が決まっていないようなとき、
つまり、getchar putchar の使う回数が決まっていない場合には問題になります。
例えば、次のようなプログラムです。

<int である理由>
#include<stdio.h>
main()
{
    int c;
    c=getchar();
    while(c!=EOF)    /* cがEOFになるまで繰り返す */
    {
        putchar(c);
        c=getchar();
    }
}

問題となるのは、“入力” と “入力の終わり” をどうやって区別するか?ということです。
c言語ではこの問題について、
どんな文字にもなりえない値を終了の合図にすることで解決しています。
この値のことを EOF と呼びます。

この EOF は、どんな文字にもあてはまらない値ですから、このプログラムの変数 c には、
任意の文字を記憶する char と、文字になりえない EOF を、値として記憶できなければなりません。

つまり、char 型だけでは、EOF を記憶する分の大きさが足りないので、
char 型にするのは不可能なのです。

そこで、char より記憶領域が少し大きい int を用いるのです。

ちなみに、EOF の値はコンパイラによって異なるのですが、キーボードから入力するとき、
Windows では Ctrl と Z の同時押し、Unix,Linux では Ctrl と D の同時押しになると思います。

<前に戻る  |目次|  次へ進む>