2011-03-23 105 views
1

我正在使用NetBeans MinGW编译简单的c程序(我是新手)。 我的问题是,我有这个简单的代码EOF阅读C/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 [enter]

以结束它。

我很感激你告诉我为什么会发生这种情况。

在此先感谢

+0

在'while'循环内打印'c',看看第一次点击ctrl + z时会打印什么。 – 2011-03-23 14:30:41

回答

2

C输入默认是面向行的。用EOF字符结尾(在Windows上为^Z,在Unix上为^D)结束该行(没有结尾的换行符),但实际上并不表示结束文件;当在下一次读取时遇到文件状态结束时,即在行的开始处。

+0

我不认为这是一种特定语言,而是控制台解释用户输入的方式。 – CashCow 2011-03-23 14:23:05

+0

这适用于linux吗?它适用于第一个ctrl + D(gnome-terminal)。 – 2011-03-23 14:27:47

+1

@John:如果你在一条线的中间,然后按'^ D',它会发送部分线,但不发送EOF。再按一次,它被当作EOF。 (这是'icanon'模式。) – geekosaur 2011-03-23 14:30:15

1

就用这种方式在控制台输入处理

按Ctrl-Z在UNIX系统上会中断,让你暂停过程中,所以我想这是一个Windows控制台。

当你在字符后面用Ctrl-Z的时候,它可能会把它当作一个“End”,它是独立的Ctrl-Z。

+0

是的。 Ctrl + D的Linux。 MinGW也意味着“Windows的极简主义GNU” – 2011-03-23 14:24:15