按行讀檔案 fgets函式

2021-10-19 12:17:33 字數 3476 閱讀 3753

函式原型:

char *fgets(char *buf, int bufsize, file *stream);

注意:第二個引數是最大讀取位元組數引數:

*buf: 字元型指標,指向用來儲存所得資料的位址。

bufsize: 整型資料,指明儲存資料的大小。

stream: 檔案結構體指標,將要讀取的檔案流。*

eofeof是乙個巨集:#define eof -1檔案中不存在eof,eof是表示檔案是否結束的乙個狀態值

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 一行一行得從檔案讀資料,顯然比較慢 不過很省記憶體。在...