先看這樣一段**:
#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遇到空格和換行時結束,注意空格時也...