我一直试图理解为什么使用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
导致代码运行另一个完整的循环?
我以为空缓冲区什么都不返回。
答案 0 :(得分:1)
这是你可能会错过的东西。拿一块你的代码:
for (nc = 0; getchar() != EOF; nc++)
getchar();
有两个getchar()
。我们称之为getchar1()
和getchar2()
。您的输入应该是这样的:
0\n
.
.
.
7\n
EOF
getchar1()
捕获数字序列和EOF
。 getchar2()
始终抓住换行符(&#39; \ n&#39;)。你循环体的计数是8(0到7)。
希望对你有所帮助。