函式原型:
char *fgets(char *buf, int bufsize, file *stream);注意:第二個引數是最大讀取位元組數引數:
*buf: 字元型指標,指向用來儲存所得資料的位址。eofeof是乙個巨集:#define eof -1檔案中不存在eof,eof是表示檔案是否結束的乙個狀態值bufsize: 整型資料,指明儲存資料的大小。
stream: 檔案結構體指標,將要讀取的檔案流。*
eof檔案結束識別符號,以\0作為結束識別符號
#define _crt_secure_no_warnings
#include
#include
#include
//按行向檔案寫入
void
test()
char buf[
120]
="撥不通的**\n訊號丟失雲層上\n孩子別緊張\n生活不是競技場\n"
;fputs
(buf, fp)
;fclose
(fp);}
//從檔案中按行讀取
void
test01()
char buf[
120]
;//feof判斷讀取是否到達檔案結尾
問題最後多出一句重複的話,並且最後乙個字是?未知符號原因:
不繼續讀取第六行是因為上一次記載的有效資料第四行結尾存在的\0,並且\n也被替換成了\0,所以不會再將游標跳轉至下一行
但是亂碼還是會出現,因為最後一次迴圈的時候會把\0前面的場字是中文,佔兩個自節,而替換的\0只有乙個位元組,因此會出現亂碼
解決上面問題的方法:利用fegts返回值檢驗是否讀取到了有效內容,沒有直接退出迴圈
檢驗是否讀取到有效字元
下面的**還存在小問題,因為如果使用者再輸入的時候沒有再最後一行的場字後面加上\n,便還是存在亂碼,原因還是場字為中文佔據兩個位元組,用乙個位元組的\0替換會有問題
#define _crt_secure_no_warnings
#include
#include
#include
//按行向檔案寫入
void
test()
char buf[
120]
="撥不通的**訊號\n丟失雲層上\n孩子別緊張\n生活不是競技場\n"
;fputs
(buf, fp)
;fclose
(fp);}
//從檔案中按行讀取
void
test01()
char buf[
120]
;//feof判斷讀取是否到達檔案結尾
while(!
feof
(fp)
)//因為輸出的時候加了\n,在輸入的時候也加了\n,說以每行之間會空出一行
//解決方法:每次迴圈將buf字串倒數第二個換行符變成\0
優化**:替換feof函式上面不寫\n出現的問題,依舊會出現,把輸入的資料換成英文就可以解決
#define _crt_secure_no_warnings
#include
#include
#include
//按行向檔案寫入
void
test()
char buf[
120]
="撥不通的**訊號\n丟失雲層上\n孩子別緊張\n生活不是競技場\n"
;fputs
(buf, fp)
;fclose
(fp);}
//從檔案中按行讀取
void
test01()
char buf[
120]
;while
(fgets
(buf,
sizeof
(buf)
, fp))}
intmain()
下面的**才是正解,有無\n均可,直接將檔案中的資料以檔案中的形式讀取出來
#define _crt_secure_no_warnings
#include
#include
#include
//按行向檔案寫入
void
test()
char buf[
120]
="撥不通的**訊號\n丟失雲層上\n孩子別緊張\n生活不是競技場\n"
;fputs
(buf, fp)
;fclose
(fp);}
//從檔案中按行讀取
void
test01()
char buf[
120]
;while
(fgets
(buf,
sizeof
(buf)
, fp))}
intmain()
C語言fgets函式按行讀取檔案
fgets,fgetws get a string from a stream.c語言沒有像c python語言的getline 函式,無法讀取檔案的某一行。然而,c語言有fgets 函式,該函式返回string型別,關鍵是該函式遇到換行符或eof,則讀取結束。利用這一特點,我們可以設定n為適當的緩...
Python按行讀檔案
1.最基本的讀檔案方法 file readline example 1.py file open sample.txt while 1 line file.readline if not line break pass do something 一行一行得從檔案讀資料,顯然比較慢 不過很省記憶體。在...
Python按行讀檔案
1.最基本的讀檔案方法 file readline example 1.py file open sample.txt while 1 line file.readline if not line break pass do something 一行一行得從檔案讀資料,顯然比較慢 不過很省記憶體。在...