EOF阅读C / C ++

时间:2011-03-23 14:15:56

标签: c getchar

我正在使用NetBeans MinGW来编译简单的c程序(我是新手)。 我的问题是我有这个简单的代码

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char** argv) {
    int c,i=0;
    while((c=getchar())!=EOF){
        i++;
    }
    printf("%d",i);
    return 0;
}

当我尝试结束这样的输入时:

  

你好^ Z [输入]

它没有这样做,我需要重新进入

  

^ Z [输入]

结束它。

我很感激你告诉我为什么会这样。

提前致谢

2 个答案:

答案 0 :(得分:2)

默认情况下,C输入是面向行的。使用EOF字符结束一行(Windows上为^Z,Unix上为^D)结束该行(没有尾随换行符)但实际上并不表示文件结束;在下一次读取时,即在行的开头遇到文件条件结束时发出信号。

答案 1 :(得分:1)

就像控制台处理输入的方式

UNIX系统上的Ctrl-Z将是一个让你暂停进程的中断,所以我猜它是一个Windows控制台。

当您在字符后按Ctrl-Z时,它可能会将其视为“结束”,它本身就是Ctrl-Z。