基本I / O的奇怪行为

时间:2014-07-04 09:13:15

标签: c

以下代码中发生了一些奇怪的事情:

#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

1 个答案:

答案 0 :(得分:2)

假设您使用的是Windows: 如果你点击asd ^ Z \ n,CTRL-Z不会结束输入,所以它不是EOF条件,它只是ascii代码26(“替换”字符。)

在Windows控制台中,行需要以CTRL-Z开头才能产生EOF条件。

(请记住,EOF不是一个字符,这是一个公正的条件,意味着没有更多的输入可用。操作系统负责转换CTRL + Z键击以执行任何它需要的任何结束您的标准输入程序 - 但只有当CTRL-Z位于一行的开头时才会这样做)