文件讀取fscanf新的認識


1.讀取一個double型

在c語言里面,將一個浮點數輸出到文件中,可以使用符合%f.

如:double a = 0.0;

       fprintf(fp, "a=%f",a);

而要從文件中讀取一個double類型的浮點數,就不能用%f,而要用%lf才可以。如:

double a;

float b;

fscanf(fp, "%f", &a);  //錯誤

fscanf(fp, " %lf", &a);//正確

追究一下原因:因為格式符"%f"指示的是一個float類型(4個字節),而我們給的指針位置是一個雙精度(double)類型,占8個字節,這樣在上面的第一個fscanf語句中,實際上把a當初float類型,也就是只填了8個字節的前4個字節,而后面的4個字節並沒有變,這樣變量a的數據就不是一個正確的值,而格式符"%lf"利用修飾符來表示這是一個長類型的浮點數(雙精度),所以會得到正確的值。

 

2.fgets()用法

從流中讀一行或指定個字符,

原型是char *fgets(char *s, int n, FILE *stream);
從流中讀取 n-1個字符,除非讀完一行(換行\n) ,參數s是來接收字符串,如果成功則返回s的指針,否則返回NULL。
形參注釋:*s結果數據的首地址;n-1:一次讀入數據塊的長度,其默認值為 1k,即1024 ;stream文件指針。

例:如果一個文件的當前位置的文本如下

Love ,I Have
But ........
如果用  fgets(str1,4,file1);
則執行后 str1="Lov", 讀取了4-1=3個字符,
而如果用  fgets(str1,23,file1);
則執行str="Love ,I Have",讀取了一行( 包括行尾的'\n',並自動加上字符串結束符'\0' )。

3.fscanf()的用法

int fscanf(FILE *stream, char *format,[argument...]);

int fscanf(文件指針,格式字符串,輸入列表);
返回值:整型,數值等於[argument...]的個數
多行輸入時,fscanf(fp,"%[^\n]",szbuff);文件指針在讀到"\n"時停止不能越過,所以后面的內容fp指不到;這時我們解決辦法是:fscanf和fgetc連用解決。輸入一條fscanf(fp,"%[^\n]",szbuff);此時文件指針指導“\n”位置,后面緊跟一條fgetc(fp);可以讀取“\n”,這樣指針即可越過"\n".

4.scanf/fscanf 的%[]和%n使用方法

詳細請見鏈接http://blog.csdn.net/wesweeky/article/details/6439777


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM