0

プログラムの動作が理解できません。scanf、ungetc、printf の順に呼び出します。

出力動作の背後にある理由を取得できませんでした。コードは次のとおりです。誰かが動作を明確にすると非常に役立ちます。

int main()
{
  int n=0;
  scanf("%d",&n);
  ungetc(n,stdin);
  printf("%d\n",n);
  return 0;
}

gcc コンパイラと Linux プラットフォームでの出力: 最初に 90 を指定すると、別の数値を待機し、別の数値を指定すると 90 が出力されます。

4

2 に答える 2

2

数値の後にあるすべての空白を期待して食べるように指示してscanf()フォーマットを終了します。別の入力を待っているように見える理由は、空白以外の文字を取得するまで読み取るためです。入力した内容は実際には読み取られず、後続の読み取りのために残されます。\nscanf()stdin

于 2012-07-07T14:12:45.547 に答える
1

スキャン形式

scanf("%d\n",&n);

入力した数値の後に続くすべての空白を消費します。したがって、空白以外の文字 (および入力をプログラムに送信するための改行) を入力した後にのみ、スキャンが終了します。特に\n改行文字は必要ありませんscanf。後続のすべての空白を消費して無視するように指示します。

于 2012-07-07T14:15:18.793 に答える