c語(yǔ)言eof的用法
c語(yǔ)言eof的用法
計(jì)算機(jī)術(shù)語(yǔ),縮寫通常為EOF(End Of File),在操作系統(tǒng)中表示資料源無(wú)更多的資料可讀取。資料源通常稱為檔案或串流。在C語(yǔ)言中,或更精確地說(shuō)成C標(biāo)準(zhǔn)函式庫(kù)中表示文件結(jié)束符(end of file)。下面我們來(lái)看看c語(yǔ)言eof的用法。
在while循環(huán)中以EOF作為文件結(jié)束標(biāo)志,這種以EOF作為文件結(jié)束標(biāo)志的文件,必須是文本文件。在文本文件中,數(shù)據(jù)都是以字符的ASCII代碼值的形式存放。我們知道,ASCII代碼值的范圍是0~255,不可能出現(xiàn)-1,因此可以用EOF作為文件結(jié)束標(biāo)志。
[html] view plain#include<stdio.h>
#include <stdlib.h>
int main(void)
{
int a,b;
while(scanf("%d %d",&a,&b) != EOF)
{
printf("%d\n",a+b);
}
return 0;
}
在上面這段代碼中,定義了兩個(gè)整型的變量,通過(guò)在while循環(huán)中判斷輸入的返回值是否為EOF(即-1)然后打印a+b的值。
之前我也只是聽(tīng)說(shuō)過(guò)EOF這個(gè)名詞,但是具體怎么用也不知道,經(jīng)過(guò)我的測(cè)試發(fā)現(xiàn):
1.
輸入1 2然后回車打印出3,這個(gè)好理解,scanf接收到兩個(gè)整型數(shù)據(jù)然后回車(這時(shí)候scanf的返回值是2,scanf()函數(shù)執(zhí)行成功時(shí)的返回值是成功讀取的變量數(shù),也就是說(shuō),你這個(gè)scanf()函數(shù)有幾個(gè)變量,如果scanf()函數(shù)全部正常讀取,它就返回幾。)
2.
輸入1然后回車,它會(huì)讓你繼續(xù)輸入,在這期間不論你空格鍵,回車鍵,TAB鍵只要是你沒(méi)輸入一個(gè)非空白符它就會(huì)讓你無(wú)限輸入。(空白字符會(huì)使scanf()函數(shù)在讀操作中略去輸入中的一個(gè)或多個(gè)空白字符,空白符可以是space,tab,enter等,直到第一個(gè)非空白符出現(xiàn)為止。scanf()函數(shù)接收輸入數(shù)據(jù)時(shí),遇以下情況結(jié)束一個(gè)數(shù)據(jù)的輸入:(不是結(jié)束該scanf函數(shù),scanf函數(shù)僅在每一個(gè)數(shù)據(jù)域均有數(shù)據(jù),并按回車后結(jié)束)。① 遇空格、“回車”、“跳格”鍵。②遇非法輸入。
3.
輸入1 2 3 4 5 6 7 8,然后回車,它會(huì)打印出3 7 11 15,這個(gè)我自己理解是當(dāng)你按下回車時(shí)scanf結(jié)束,但是接收的數(shù)據(jù)有4組,它會(huì)先取出兩個(gè)然后打印之和,然后依次。。。。打印(理解不對(duì)之處還望各位賜教。)
4.
輸入,. ~等字符回車,會(huì)進(jìn)入無(wú)限循環(huán)屏幕上打印無(wú)限的數(shù)字,這是因?yàn)檩斎胍粋€(gè)字符串時(shí),由于scanf需要一個(gè)整型數(shù)據(jù),可是當(dāng)前輸入緩沖中的數(shù)據(jù)并不是一個(gè)整型的數(shù)據(jù),那么scanf會(huì)直接退出,并返回0,表示讀到0個(gè)數(shù),同時(shí)不會(huì)改為輸入緩沖,會(huì)進(jìn)入到下一輪的循環(huán)之中,在屏幕輸出:上一次的計(jì)算結(jié)果,這時(shí)由于輸入緩沖中還有數(shù)據(jù),scanf不會(huì)阻塞,而是直接返回,可是發(fā)現(xiàn)緩沖中的數(shù)據(jù)不是所要的數(shù)據(jù),這樣返回0.....使得循環(huán)一直運(yùn)行下去。要是想解決問(wèn)題可以在循環(huán)語(yǔ)句中加上這句話:fflush(stdin);這樣就不會(huì)無(wú)限打印數(shù)字了。
至于想讓循環(huán)結(jié)束,在windows下輸入ctrl+Z(即EOF)然后回車就可以了。好了,我得研究結(jié)束了,寫出來(lái)大家共同理解,希望文中有錯(cuò)誤的地方大家可以指點(diǎn)一二。