所以我開始用ANSI C書學習C語言。本書的早期練習之一就是編寫一個程序,該程序能夠接受文本輸入並將每一個單詞打印在一個新的行中,很簡單。所以我做:爲什麼EOF(文件結束)不在沒有' n'之前的行末尾工作?
#include <stdio.h>
#define IN 1
#define OUT 0
main() {
int c;
int state;
state = OUT;
while((c = getchar()) != EOF){
if(c != ' ' && c != '\n' && c != '\t'){
state = IN;
}else if(state == IN){
state = OUT;
putchar('\n');
}
if(state == IN)
putchar(c);
}
getchar();
}
的事情是,當程序正常工作就不會從while循環,如果我(在Windows上按Ctrl + Z)輸入EOF
突破的線路,或在最後一個字符它的中間。
所以我找到了答案here。
我學到的是(Ctrl + Z)char是某種信號來結束流,它必須在getchar()
的新行上返回EOF
。雖然這一切都很好,它有點幫助,我真的很想知道爲什麼EOF
必須在自己的路線?
看到這個答案http://stackoverflow.com/questions/4358728/end-of-file-eof-in-c?rq=1 –
幾周前我們有一個類似的問題,我找不到對此的任何參考。但據我記得,對於大多數UNIX類終端,'^ D'刷新輸入緩衝區,如果刷新了EOF,EOF將被髮送;換行符也會刷新緩衝區。也許這對Windows來說是一樣的(用'^ Z'代替'^ D')? – mafso
另請注意,最後一個'getchar();'永遠不會讀取任何東西(最後一個'getchar'調用在退出循環時返回'EOF')。 – mafso