4
#include <stdio.h>

int main(void)
{
    int c;
    c = getchar();
    putchar(c);
    c = getchar();
    putchar(c);
    c = getchar();
    putchar(c);
    return 0;
}

一度だけ入力された行で 3 回呼び出される関数が機能する理由を理解したいと思います。ある人は、この状況で標準入力バッファを使用していると説明しましたが、それは記憶の一部です。私はそれについて何か読みたいです。いくつかのリソースを教えてもらえますか?

4

1 に答える 1

3

これは、ターミナル (コマンド ライン ウィンドウ) の機能です。

デフォルトでは、ユーザーが Enter/Return を押すまで、ターミナルはユーザーからの入力を収集します。次に、行全体がプログラムの入力ファイルストリームにプッシュされます(stdin、つまり、<stdio.h>ではなくを使用しているため<iostream>、関係ありませんcin)。

これは、プログラムがすべてのキーボード イベントを解釈する必要がないため (たとえば、Backspace が押されたときに文字を削除するなど) 便利です。キーボード自体を処理したいプログラムは、このデフォルトの入力モードを無効にすることができます。terminfoそれに関連する Google キーワードは、またはだと思いますtermcap

getchar()特にあなたの質問に関しては、 3文字が含まれている場合、1行の入力で3回の呼び出しに適しています。1 文字だけを入力した場合、プログラムは後続のgetchar()呼び出しで追加の入力を待機する必要があります。

于 2012-12-28T10:58:07.010 に答える