2

このプログラムの仕組みを理解していませんか?

char c;
int i;
for(i=1;i<=5;i++)
{
     scanf("%c",&c);
     printf("%c",c);
     ungetc(c,stdin);
}

プログラムの出力は、最初に入力された文字が 5 回印刷されます。

a
aaaaa

SO の投稿によると、putc と ungetc の違いは何ですか? ungetc入力バッファに何かを戻します。

したがって、このプログラムでは、最初の反復中にscanf()キーボードからの入力を受け入れてprintf()表示しungetc()、同じ文字を入力バッファーにプッシュバックします。

しかし、2回目の反復では入力が受け入れられないためprintf()、入力バッファにプッシュされた文字が出力されると推測していますungetc()

誰かがこのプログラムがどのように機能するかを明確に説明できますか?

4

2 に答える 2

3

マニュアルページによるとungetc()

ungetc()ストリームにプッシュcバックし、unsigned char にキャストして、後続の読み取り操作で使用できるようにします。

したがって、基本的にchar、最初に入力したものは何でも変数に読み込まれc、出力後に同じ値が入力バッファーにプッシュされます。ここでscanf()、入力バッファから読み取るため、プッシュされた値ungetc()は次にscanf()読み取るために使用できます。そのため、はユーザー入力を求めscanf()いません。

ここで、ループが 5 回実行されると、5 回scanf()の s が発生し、すべてが最初の入力データを読み取り、同じ 5 回出力します。

とはいえ、常に の戻り値をチェックして、scanf()成功していることを確認してください。

于 2015-07-10T12:36:28.017 に答える