对于循环迭代问题

时间:2013-09-15 06:42:36

标签: c kernighan-and-ritchie

我尝试了很多此代码的变体,包括使用scanf函数,每次增加2点而不是1点。这是代码:

#include <stdio.h>
int main(void)
{
    double nc;
    for(nc = 0; getchar() != EOF; ++nc)
          printf("%.0f\n", nc);
}

这是我得到的输出。我使用的输入是qwerty,输出数字是0-11而不是0-5,如预期的那样。

q 
0
1
w
2
3
e
4
5
r
6
7
t
8
9
y
10 
11

我有一个想法是当我按下回车时,它被计为getchar的值以及我输入的字符,这会导致循环运行两次迭代。任何人都可以进一步解释这个概念,或者为我提供有关它的更多信息的链接吗?

1 个答案:

答案 0 :(得分:5)

上一个getchar的尾随换行符被视为下一个getchar的输入

所以使用,

   for(nc = 0; getchar() != EOF; ++nc)
      {
       printf("%.0f\n", nc);
       getchar(); //"eat" the trailing newline
      }