c 讀檔案,fscanf結尾問題

2021-07-09 06:53:46 字數 1003 閱讀 6131

先看這樣一段**:

#include

#include

int main()

return 0;

}

假設"in.txt"中存放的內容是:abcdfefg

按照自己的想法,輸出應該是:abcdefg,但是實際上的輸出卻是:abcdefgg,最後乙個字元被輸出了兩次!

在官方幫助文件裡查詢feof,其返回值說明為:a non-zero value is returned in the case that the end-of-file indicator associated with the stream is set.

otherwise, a zero value is returned. 如果流的檔案結束符(eof)已經被設定,那麼返回非零值,否則返回零。輸入檔案的最後乙個字元是不可見的字元 '\0',所以檔案指標移動到指向'\0'的時候,還沒有設定eof,此時進行設定,因此再進入迴圈體一次。而fscanf()已經讀取不到有效字元,所以返回eof,而ch的值沒有被改變(同樣,參考文件裡對fscanf()的說明),還是'g',所以'g'第二次被輸出。

由於fscanf()返回的讀取的有效字元的個數,所以**可以修改為:

#include

#include

int main()

如果我的檔案格式是下邊這樣的,該如何解決呢?

1: (g, 2), (f, 3)

2: (g, 2), (f, 3)

3: (f, 4), (g, 5)

4: (f, 4), (g, 5)

5: (f, 6), (c, w)

6: (p, f), (g, 7)

7: (g, 7), (g, 7)

w: (c, w), (c, w)

可以用下邊的格式解析:

fscanf(file,"%c: (%c, %c), (%c, %c)", &first,&second,&third,&fourth,&fifth);

很方便吧?

C 中常見的檔案讀取結尾問題

在使用c c 讀檔案的時候,一定都使用過eof 這個函式來判斷檔案是否為空或者是否讀到檔案結尾了,也會在使用這個函式的過程中遇到一些問題,如不能準確的判斷是否為空或者是否到了檔案尾,以至於有些人可能還會懷疑這個函式是不是本身在設計上就有問題。先來看看如下這段 include stream inclu...

C 中常見的檔案讀取結尾問題

先來看看如下這段 include stream include using namespace std int main while fin.eof system pause return 0 編譯並執行以上 如果test.txt不存在,程式會形成死迴圈,fin.eof 永遠返回false,如果te...

C 用fscanf()函式讀取TXT檔案內容

fscanf 函式的標頭檔案是,函式原型為int fscanf file stream,constchar format,argument.其功能為根據資料格式 format 從輸入流 stream 中寫入資料 argument 與fgets的差別在於 fscanf遇到空格和換行時結束,注意空格時也...