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



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

这是我的代码:

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

我的结果是:

0
1
2
3
4
5
6
7
8

8是输入 ctrl-D 后使用 ctrl-D 时给我的7。触发eof会导致代码运行另一个完整循环的原因是什么?我以为空缓冲区不会返回任何内容。

这是您可能会错过的东西。获取您的代码片段:

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

有两种getchar()。让我们称呼他们,getchar1()getchar2().您的输入应如下所示:

0n
.
.
.
7n
EOF

getchar1()捕获数字和EOF的序列。 getchar2()始终捕获换行符 ('')。循环体的计数是 8(0 到 7)。

希望对您有所帮助。

最新更新