1

そのため、Visual Studio 2012 Ultimate で getchar を使用すると、奇妙な結果が得られます。これは、コード エラーではなく、別の動作であることを示すために思いついた最も単純な例です。

#include <cstdio>

int main(int argc, char* argv[]) {
    char c = getchar();
    putchar(c);
    return 0;
}

ただし、結果は (視覚的に) iostream ライブラリの「cin」に少し似ています。getchar は 1 文字 (最初の文字) を返しますが、キーを押すと画面に文字が表示され、Enter キーを押すまで戻りません。私は少し調べましたが、これが発生した他のケースを実際に見つけることはできません。ここで何が起こっているのかについての手がかりはありますか?

4

2 に答える 2

1

入力は行バッファリングされるためgetchar、少なくとも 1 行の入力が入力された場合にのみ文字が取得されます。Linuxで行を終了せずに入力^Dを閉じると、Windowsで推測^Zすると、最初の文字も出力されることがわかります。

于 2013-04-25T01:19:19.433 に答える
1

標準入力は通常、行バッファリングされます。つまり、システムは、テキストの全行が入力されるまで、入力バッファーに入力された文字を読み取って保存します。このgetchar()関数は、その入力バッファーから文字を読み取ります。

ほとんどの場合、入力を一度に 1 行ずつ読み取り、読み取ったらその行を処理する方が理にかなっています。

一度に 1 文字ずつ即座に入力する方法はありますが、それらはシステム固有のものです (そして少し醜いです)。これについては、 comp.lang.c FAQの質問 19.1 で説明されています。

于 2013-04-25T01:21:12.737 に答える