代碼如下;```?#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;}??```程序目的是計(jì)算輸入的字符個(gè)數(shù),我分別輸入了三種情況的數(shù)據(jù),得到情況如下:1、什么都不輸入直接按【ctrl + D】 (Linux系統(tǒng)) 程序直接退出。2、abc【ctrl + D】【ctrl + D】程序退出。注意:這個(gè)時(shí)候我需要按兩下才能退出。3、abc【回車(chē)】這個(gè)時(shí)候光標(biāo)移動(dòng)到了下一行行首,我再按【ctrl + D】程序退出。我很疑惑第二種情況,為什么需要按兩次【ctrl + D】呢,小白....先謝謝了
2 回答
已采納

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