2014-03-26 26 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' –