EOF加入了反击,不明白为什么

时间:2017-11-08 10:43:49

标签: c kernighan-and-ritchie

我一直试图理解为什么使用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后使用ctrl-D时,7就是给我的。有没有理由为什么触发eof导致代码运行另一个完整的循环? 我以为空缓冲区什么都不返回。

1 个答案:

答案 0 :(得分:1)

这是你可能会错过的东西。拿一块你的代码:

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

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

0\n
.
.
.
7\n
EOF

getchar1()捕获数字序列和EOFgetchar2()始终抓住换行符(&#39; \ n&#39;)。你循环体的计数是8(0到7)。

希望对你有所帮助。