功能
專業(yè)成都網(wǎng)站建設(shè)公司,做排名好的好網(wǎng)站,排在同行前面,為您帶來(lái)客戶和效益!創(chuàng)新互聯(lián)為您提供成都網(wǎng)站建設(shè),五站合一網(wǎng)站設(shè)計(jì)制作,服務(wù)好的網(wǎng)站設(shè)計(jì)公司,成都網(wǎng)站制作、成都網(wǎng)站建設(shè)負(fù)責(zé)任的成都網(wǎng)站制作公司!
從文件結(jié)構(gòu)體指針stream中讀取數(shù)據(jù),每次讀取一行。讀取的數(shù)據(jù)保存在buf指向的字符數(shù)組中,每次最多讀取bufsize-1個(gè)字符(第bufsize個(gè)字符賦'\0'),如果文件中的該行,不足bufsize個(gè)字符,則讀完該行就結(jié)束。如若該行(包括最后一個(gè)換行符)的字符數(shù)超過(guò)bufsize-1,則fgets只返回一個(gè)不完整的行,但是,緩沖區(qū)總是以NULL字符結(jié)尾,對(duì)fgets的下一次調(diào)用會(huì)繼續(xù)讀該行。函數(shù)成功將返回buf,失敗或讀到文件結(jié)尾返回NULL。因此我們不能直接通過(guò)fgets的返回值來(lái)判斷函數(shù)是否是出錯(cuò)而終止的,應(yīng)該借助feof函數(shù)或者ferror函數(shù)來(lái)判斷
函數(shù)原型
char *fgets(char *buf, int bufsize, FILE *stream);
*buf:字符型指針,指向用來(lái)存儲(chǔ)所得數(shù)據(jù)的地址。
bufsize: 整型數(shù)據(jù),指明存儲(chǔ)數(shù)據(jù)的大小。
*stream: 文件結(jié)構(gòu)體指針,將要讀取的文件流。
stream文件流指針體指向文件內(nèi)容地址的偏移原則
如果使用fgets()讀取某個(gè)文件,第一次讀取的bufsize為5,而文件的第一行有10個(gè)字符(算上'\n'),那么讀取文件的指針會(huì)偏移至當(dāng)前讀取完的這個(gè)字符之后的位置。也就是第二次再用fgets()讀取文件的時(shí)候,則會(huì)繼續(xù)讀取其后的字符。而,如果使用fgets() 讀取文件的時(shí)候bufsize大于該行的字符總數(shù)加2(多出來(lái)的兩個(gè),一個(gè)保存文件本身的'\n'換行,一個(gè)保存字符串本身的結(jié)束標(biāo)識(shí)'\0'),文件并不會(huì)繼續(xù)讀下去,僅僅只是這一行讀取完,隨后指向文件的指針會(huì)自動(dòng)偏移至下一行。
例子
如果一個(gè)文件的當(dāng)前位置的文本如下
Love, I Have
Since you can do it.
如果用fgets(str1,6,file1);去讀取
則執(zhí)行后str1 = "Love," ,讀取了6-1=5個(gè)字符
這個(gè)時(shí)候再執(zhí)行fgets(str1,20,file1)則執(zhí)行后str1 = " I Have\n"
而如果
fgets(str1,23,file1);
則執(zhí)行str1="Love ,I Have",讀取了一行(包括行尾的'\n',并自動(dòng)加上字符串結(jié)束符'\0'),當(dāng)前文件位置移至下一行,雖然23大于當(dāng)前行上字符總和,可是不會(huì)繼續(xù)到下一行。而下一次調(diào)用fgets()繼續(xù)讀取的時(shí)候是從下一行開(kāi)始讀。
從 handle 指向的文件中讀取一行并返回長(zhǎng)度最多為 length - 1 字節(jié)的字符串。碰到換行符(包括在返回值中)、EOF 或者已經(jīng)讀取了 length - 1 字節(jié)后停止(看先碰到那一種情況)。如果沒(méi)有指定 length,則默認(rèn)為 1K,或者說(shuō) 1024 字節(jié)。
出錯(cuò)時(shí)返回 FALSE。
②fscanf()
功 能:
從一個(gè)流中執(zhí)行格式化輸入,fscanf遇到空格和換行時(shí)結(jié)束,注意空格時(shí)也結(jié)束。這與fgets有區(qū)別,fgets遇到空格不結(jié)束。
用 法: int fscanf(FILE *stream, char *format,[argument...]);
int fscanf(文件指針,格式字符串,輸入列表);
常用基本參數(shù)對(duì)照:
%d:讀入一個(gè)十進(jìn)制整數(shù).
%i :讀入十進(jìn)制,八進(jìn)制,十六進(jìn)制整數(shù),與%d類似,但是在編譯時(shí)通過(guò)數(shù)據(jù)前置來(lái)區(qū)分進(jìn)制,如加入“0x”則是十六進(jìn)制,加入“0”則為八進(jìn)制。例如串“031”使用%d時(shí)會(huì)被算作31,但是使用%i時(shí)會(huì)算作25.
%u:讀入一個(gè)無(wú)符號(hào)十進(jìn)制整數(shù).
%f %F %g %G : 用來(lái)輸入實(shí)數(shù),可以用小數(shù)形式或指數(shù)形式輸入.
%x %X: 讀入十六進(jìn)制整數(shù).
%o': 讀入八進(jìn)制整數(shù).
%s : 讀入一個(gè)字符串,遇空格結(jié)束。
%c : 讀入一個(gè)字符。無(wú)法讀入空值??崭窨梢员蛔x入。
③
fprintf()
fprintf是C/C++中的一個(gè)格式化寫(xiě)-庫(kù)函數(shù),位于頭文件
2.fprintf(stdout,“hello world\n”)