scanf语句的参数

时间:2011-04-27 08:46:59

标签: c

我写了这段代码:

  scanf("%d \n", &n);
  for(i=0;i<n;i++)
  printf("%d \n",i);

没打印。我意识到在scanf的调用中有一个'\ n'。当我删除它时,我得到了预期的输出。当scanf格式字符串包含'\ n'时,为什么不给出输出?

是什么原因?

1 个答案:

答案 0 :(得分:2)

scanf对行尾有一个隐式读取。由于您的格式字符串中有一个'\ n',因此它正在读取您的第一个返回作为格式的一部分。然后它继续等待它作为终结者所期望的'\ n'。如果您提供了另一个令牌,然后返回,那么您将获得预期的结果。

所以,如果你提供:

2
7

你会得到输出:

0
1

因为,第一个数字(2)已与您的第一个格式说明符匹配。我不确定的是为什么你需要提供另一个令牌(只是在后续行上按回车不起作用)。我认为这是因为scanf至少需要一个非空格字符,但我可能错了。