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

摆脱\n你的 scanf

于 2013-06-12T10:45:41.847 回答
9

scanf 中的格式字符串的工作方式如下(参见http://www.cplusplus.com/reference/cstdio/scanf/

[格式为] C 字符串,其中包含一系列字符,这些字符控制如何处理从流中提取的字符:

空白字符:该函数将读取并忽略在下一个非空白字符之前遇到的任何空白字符...

在您的两个中,您scanf()都有一个换行符。因此,当您第一次按 Enter 键时,它会被 忽略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 回答