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使用方法