2014-03-26 28 views
0
char ch; 
while((ch=getc(stdin))!=EOF) 
{ 
    putc(ch,stdout); 
} 

我们知道EOF字符可以通过ctrl-z输入。首先输入文本行时未检测到EOF字符?

我跑的程序两次: -

1-当我输入ctrl-z,循环被终止,这是可以接受的。

2-当我输入ctrl-z以及其他一些文本如demo,然后按ctrl-z,则循环不会终止。

所以我的问题是,为什么循环只通过输入ctrl-z单独终止?

+0

正在使用哪个终端/外壳? – user2864740

+0

@ user2864740:这是什么意思? –

+0

即xterm/bash?在Windows/cmd.exe的? – user2864740

回答

2

EOF不是可以放入流中的字符。这是一个元控制字符,可以由getc返回,但不能写入。 ctrl-z在技术上没有发送EOF,它将SIGTSTP发送到过程并且getc被编程为通过返回EOF来响应它。

+0

我同意它,但为什么这不会发生在第二种情况 –

+0

您是否实际输入'demo',然后按'ctrl-z'或输入'^ z'?后者不适用于大多数终端。 –

+0

我输入'demo',然后按'ctrl-z' –