C語言 格式化讀寫文件詳解
fscanf() 和 fprintf() 函數(shù)與前面使用的 scanf() 和 printf() 功能相似,都是格式化讀寫函數(shù),兩者的區(qū)別在于 fscanf() 和 fprintf() 的讀寫對象不是鍵盤和顯示器,而是磁盤文件。
這兩個函數(shù)的原型為:
int fscanf ( FILE *fp, char * format, ... );
int fprintf ( FILE *fp, char * format, ... );
fp 為文件指針,format 為格式控制字符串,... 表示參數(shù)列表。與 scanf() 和 printf() 相比,它們僅僅多了一個 fp 參數(shù)。例如:
FILE *fp; int i, j; char *str, ch; fscanf(fp, "%d %s", &i, str); fprintf(fp,"%d %c", j, ch);
fprintf() 返回成功寫入的字符的個數(shù),失敗則返回負(fù)數(shù)。fscanf() 返回參數(shù)列表中被成功賦值的參數(shù)個數(shù)。
【示例】用 fscanf 和 fprintf 函數(shù)來完成對學(xué)生信息的讀寫。
#include<stdio.h> #define N 2 struct stu{ char name[10]; int num; int age; float score; } boya[N], boyb[N], *pa, *pb; int main(){ FILE *fp; int i; pa=boya; pb=boyb; if( (fp=fopen("D:\\demo.txt","wt+")) == NULL ){ printf("Cannot open file, press any key exit!"); getch(); exit(1); } //從鍵盤讀入數(shù)據(jù),保存到boya printf("Input data:\n"); for(i=0; i<N; i++,pa++){ scanf("%s %d %d %f", pa->name, &pa->num, &pa->age, &pa->score); } pa = boya; //將boya中的數(shù)據(jù)寫入到文件 for(i=0; i<N; i++,pa++){ fprintf(fp,"%s %d %d %f\n", pa->name, pa->num, pa->age, pa->score); } //重置文件指針 rewind(fp); //從文件中讀取數(shù)據(jù),保存到boyb for(i=0; i<N; i++,pb++){ fscanf(fp, "%s %d %d %f\n", pb->name, &pb->num, &pb->age, &pb->score); } pb=boyb; //將boyb中的數(shù)據(jù)輸出到顯示器 for(i=0; i<N; i++,pb++){ printf("%s %d %d %f\n", pb->name, pb->num, pb->age, pb->score); } fclose(fp); return 0; }
運行結(jié)果:
Input data:
Tom 2 15 90.5↙
Hua 1 14 99↙
Tom 2 15 90.500000
Hua 1 14 99.000000
打開 D:\\demo.txt,發(fā)現(xiàn)文件的內(nèi)容是可以閱讀的,格式非常清晰。用 fprintf() 和 fscanf() 函數(shù)讀寫配置文件、日志文件會非常方便,不但程序能夠識別,用戶也可以看懂,可以手動修改。
如果將 fp 設(shè)置為 stdin,那么 fscanf() 函數(shù)將會從鍵盤讀取數(shù)據(jù),與 scanf 的作用相同;設(shè)置為 stdout,那么 fprintf() 函數(shù)將會向顯示器輸出內(nèi)容,與 printf 的作用相同。例如:
#include<stdio.h> int main(){ int a, b, sum; fprintf(stdout, "Input two numbers: "); fscanf(stdin, "%d %d", &a, &b); sum = a + b; fprintf(stdout, "sum=%d\n", sum); return 0; }
運行結(jié)果:
Input two numbers: 10 20↙
sum=3036.html
以上就是對 C語言格式化讀寫文件的資料整理,后續(xù)繼續(xù)補(bǔ)充相關(guān)資料,謝謝大家對本站的支持!
您可能感興趣的文章
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用函數(shù)刪除字符
- 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)式函數(shù)庫
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言中對數(shù)函數(shù)的表達(dá)式 c語言中對數(shù)怎么表達(dá)
- 04-02c語言用函數(shù)寫分段 用c語言表示分段函數(shù)
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排序法函數(shù)
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段函數(shù)
- 04-02C語言中怎么打出三角函數(shù) c語言中怎么打出三角函數(shù)的值
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求階乘


閱讀排行
本欄相關(guān)
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對數(shù)函數(shù)的表達(dá)式 c語言中對
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
隨機(jī)閱讀
- 01-11ajax實現(xiàn)頁面的局部加載
- 01-10delphi制作wav文件的方法
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 04-02jquery與jsp,用jquery
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-10C#中split用法實例總結(jié)
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 08-05DEDE織夢data目錄下的sessions文件夾有什