1

我尝试了此代码的许多变体,包括使用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,这会导致循环运行两次迭代。任何人都可以进一步解释这个概念或为我提供更多信息的链接吗?

4

1 回答 1

5

前一个的尾随换行符getchar被用作下一个的输入getchar

所以使用,

   for(nc = 0; getchar() != EOF; ++nc)
      {
       printf("%.0f\n", nc);
       getchar(); //"eat" the trailing newline
      }
于 2013-09-15T06:44:32.410 回答