3
#include <stdio.h>
int main (void) 
{
  int T, y, z;
  scanf ("%i\n", &T);
  for (T; T > 0 ; --T) 
  {
   scanf ("%i\n", &y);
  }
return 0;
}

4を入力したら、さらに4入力するべきではないですか? 代わりに、5 つの整数を入力できます。他の番号でも試してみました。

4

2 に答える 2

9

scanf のフォーマット文字列は次のように機能します ( http://www.cplusplus.com/reference/cstdio/scanf/を参照) 。

[形式は] ストリームから抽出された文字の処理方法を制御する一連の文字を含む C 文字列:

空白文字: 関数は、次の非空白文字の前にある空白文字を読み取って無視します ...

両方にscanf()改行があります。したがって、最初にエンター キーを押しても、 によって無視されscanfます。

答えのいくつかは、ループを変更するように指示しています...これは正しくありません。ループは問題ありません。上記が頭痛の原因です。次のことを試してください。

#include <stdio.h>
int main(int argc, char const *argv[])
{
  int T, y, z;
  scanf ("%i", &T);

  printf("Count is= %d\n", T);
  for (T; T > 0 ; --T) 
  {
      printf("T= %d\n", T);
      scanf ("%i", &y);
  }
return 0;
}

編集: 標準入力のフラッシュについてコメントしてくれた Daniel Fischer に感謝します。これは現在削除されています。この説明を見つけました(fflush(stdin) の使用)。

于 2013-06-12T10:51:37.903 に答える
9

\nあなたのscanfから取り除くだけです

于 2013-06-12T10:45:41.847 に答える