代碼如下;```?#include <stdio.h>int main(){ int count = 0; int ch; while ((ch = getchar()) != EOF) count++; printf("All of the characters is %d.\n", count); return 0;}??```程序目的是計算輸入的字符個數(shù),我分別輸入了三種情況的數(shù)據(jù),得到情況如下:1、什么都不輸入直接按【ctrl + D】 (Linux系統(tǒng)) 程序直接退出。2、abc【ctrl + D】【ctrl + D】程序退出。注意:這個時候我需要按兩下才能退出。3、abc【回車】這個時候光標(biāo)移動到了下一行行首,我再按【ctrl + D】程序退出。我很疑惑第二種情況,為什么需要按兩次【ctrl + D】呢,小白....先謝謝了
2 回答
已采納

Camel97
TA貢獻(xiàn)49條經(jīng)驗 獲得超38個贊
主要有兩點,第一個是 io操作存在一個緩沖區(qū)的問題,一般終端輸入會先被寫入緩沖區(qū),當(dāng)以回車或者EOF結(jié)束時getchar才能開始讀取。第二個是當(dāng)EOF作為結(jié)尾時,getchar開始讀取這一行,但是不會去讀最后的EOF字符,這應(yīng)該是一種特性。但是如果在新的緩沖區(qū)直接寫入EOF,getchar可以讀取到EOF。你的第一個EOF是作為第一個緩沖區(qū)的結(jié)束不被讀取,第二個EOF被讀取。
添加回答
舉報
0/150
提交
取消