以下代码中发生了一些奇怪的事情:
#include<stdio.h>
int main() {
int counts=0,x;
while ((x=getchar()) != EOF)
counts += 1;
printf("%d",counts);
return 0;
}
当我输入asd^Z\n
时(^Z
代表EOF
,\n
代表回车),输出为4
而不是3
;
当我输入asd\n
,^Z\n
时,输出变为3
。
那么,是什么让它与众不同?为什么第一次尝试该程序会考虑EOF
?
答案 0 :(得分:2)
假设您使用的是Windows: 如果你点击asd ^ Z \ n,CTRL-Z不会结束输入,所以它不是EOF条件,它只是ascii代码26(“替换”字符。)
在Windows控制台中,行需要以CTRL-Z开头才能产生EOF条件。
(请记住,EOF不是一个字符,这是一个公正的条件,意味着没有更多的输入可用。操作系统负责转换CTRL + Z键击以执行任何它需要的任何结束您的标准输入程序 - 但只有当CTRL-Z位于一行的开头时才会这样做)