EOF 添加到计数器,不知道为什么

EOF adds to counter, no idea why

我一直试图理解为什么使用 ctrl-D 触发 eof 会在 for 循环中添加一个计数器。

这是我的代码:

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

我的结果是:

0
1
2
3
4
5
6
7
8

8是我输入7后用ctrl-D给我的。是否有触发 eof 导致代码 运行 另一个完整循环的原因? 我以为一个空的缓冲区将 return 什么都没有。

这里有一些你可能会错过的东西。拿一段你的代码:

for (nc = 0; getchar() != EOF; nc++)
    getchar();

有两个getchar()。我们称它们为 getchar1()getchar2()。您的输入应该是这样的:

0\n
.
.
.
7\n
EOF

getchar1() 捕捉数字序列和 EOFgetchar2() 始终捕获换行符 ('\n')。你通过 for 循环体的次数是 8(0 到 7)。

希望对您有所帮助。