讀取文本文件
若要讀取一個(gè)文件,請(qǐng)使用r模式打開。一般來說,讀取文件時(shí)最好不要用fscanf,因?yàn)?,除非文件的?shù)據(jù)格式非常標(biāo)準(zhǔn),否則fscanf并不能準(zhǔn)確地讀取數(shù)據(jù)。請(qǐng)換用fgets一次讀入一行,然后分析提取所需數(shù)據(jù)。下面的代碼演示了一個(gè)讀入文件并在屏幕上顯示其內(nèi)容的過程:
?
#includeint main() {FILE *f;char s[1000];f=fopen("infile","r");if (!f) return 1;while (fgets(s,1000,f)!=NULL) printf("%s",s);fclose(f);return 0;}
fget函數(shù)在遇到文件結(jié)束符eof時(shí)會(huì)返回NULL。程序依次讀入各行(本例中最長1,000個(gè)字符)并將其在標(biāo)準(zhǔn)輸出設(shè)備上顯示。注意,printf語句的格式字符串中并不包含\n ,這是因?yàn)閒gets會(huì)在它讀入的每一行末尾加上一個(gè)\n 。所以,若某行的長度超出了限制(由fgets的第二個(gè)參數(shù)指定),您會(huì)發(fā)現(xiàn)它將不能被完整地顯示。
C 常見錯(cuò)誤不要把fclose誤輸入成close。close函數(shù)是存在的,所以誤輸入成close也能通過編譯。如果只是打開或關(guān)閉幾個(gè)文件的話,程序甚至還表現(xiàn)為正常工作的樣子。但是,如果是在一個(gè)循環(huán)中打開和關(guān)閉文件的話,程序最后就會(huì)因耗盡可用的文件句柄或內(nèi)存空間而崩潰,因?yàn)閏lose沒有正確地將文件關(guān)閉。
評(píng)論
查看更多