getchar()の機能

機能

  • キーボードからの入力を、Enter入力まで待つ。
  • Enter入力で待ちを解除して、以降は呼ばれる度に1文字ずつ入力された順に返す

ソースコード

#include <stdio.h>

int main(void)
{
    int c;

    while (1) {
        c = getchar();
        printf("getchar:%c\n", c);
    }
}

実行内容

  • キーボードから「uio」と入力後、Enterキーを押す。

実行結果

uio
getchar:u
getchar:i
getchar:o
getchar:

補足

  • 実行結果は、Enterキーの入力後に表示された。
  • Enterキー入力後は、呼ばれるたびに1文字ずつ返している。

異常終了

getchar()が異常終了した時、それまでに読み出されていない文字があってもEOFのみが返される。

ソースコード

#include <stdio.h>

int main(void)
{
    int c, ns, nt, nl;

    ns = nt = nl = 0;
    while ((c = getchar()) != EOF) {
        printf("getchar:%c, %d\n", c, c);
        if (c == '\n')  ++nl;       /* 改行 */
        if (c == '\t')  ++nt;       /* タブ */
        if (c == ' ')   ++ns;       /* スペース */
        if (c == EOF) break;
    }
        printf("getchar:%c, %d\n", c, c);

    /* 印字 */
    printf("Line:%d, Tab:%d, Space:%d", nl, nt, ns);
}

実行内容

  • 「fdsa」入力後、Enter入力(正常終了)
  • 「fdsa」入力後、Ctrl+C入力(異常終了)

実行結果

fdsa
getchar:f, 102
getchar:d, 100
getchar:s, 115
getchar:a, 97
getchar:
, 10
fdsagetchar:, -1
Line:1, Tab:0, Space:0

補足

一回目の「fdsa」に対してはgetchar()は1文字ずつ返して、最後はLF(Enter)を返している。
二回目の「fdsa」に対してはgetchar()は最後の異常終了だけを返している。
この動作は、Borland C++とVisual Studio2017のConsoleApplictionで同じだった。