#include<stdio.h>
main()
{
char c;
c=getchar();
putchar(c);
c=getchar();
putchar(c);
c=getchar();
putchar(c);
c=getchar();
putchar(c);
c=getchar();
putchar(c);
}
私の最初の質問は、getchar()を使用するたびにメモリ内のどこかにバッファを作成し、Enterキーを押すとgetchar()がバッファからコンテンツの読み取りを開始し、getchar()が一度に 1 文字だけを読み取ることです。したがって、この上記のプログラムでは、最初のgetchar()が実行されると、メモリにバッファが作成され、行全体のコンテンツがバッファに格納されます。Enter キーを押したときに「vik」と入力すると、getchar()がバッファからコンテンツの読み取りを開始し、次に「v」と入力します。 getchar()は一度に 1 文字しか読み取らないため、変数 c に代入すると、'v' のみがバッファーからフラッシュされます。次に、次のステートメントでputchar(c)が画面に 'v' を出力します。だから今「イク」getchar()ステートメントを実行すると、ユーザーに何かを書き込むように再度要求されることはありません。これは、バッファーが完全にフラッシュされない限り、バッファーからコンテンツを読み取るのではなく、ユーザーに何かを書き込むように再度要求されないためです。したがって、ここで「ik」はバターに残っているため、2番目のgetchar()ステートメントでバッファから「i」を読み取り、再び「i」がバッファからフラッシュされ、putchar(c)が「i」を出力します。3 番目のgetchar()を実行すると、バッファに「k」が残され、バッファから「k」が読み取られ、c に代入され、「k」もバッファからフラッシュされます。この時点で、バッファは完全にフラッシュされ、バッファにはコンテンツがありません。 4 番目の getchar() の場合コンテンツがバッファにないため、ユーザーに何かを書き込むように要求を実行します。「as」と書き、ヒットが入るとします。 ここで私の主な質問は、2 つのコンテンツ「as」を指定すると、2 つの getchar() と putchar(c) が実行されるため、「a」だけが画面に出力されるのはなぜ「s」も出力されないのかということです。
そして、私の 2 番目の質問は、getchar()を使用するとメモリ内にバッファが作成されるため、fflush(stdin)を使用するとバッファをフラッシュする必要があるということです。したがって、上記のプログラムでこれに従って、最初のputchar(c)の後にfflush(stdin)を書き込むと、バッファをフラッシュする代わりに実行され、上記のプログラムと同じ出力が出力されるのはなぜですか?