c語言中的文件格式化讀寫函數fscanf和fprintf函數


很多時候我們需要寫入數據到文件中時都覺得很困擾,因為格式亂七八槽的,可讀性太差了,
於是我們就想有沒有什么函數可以格式化的從文件中輸入和輸出呢,還真有。下面我將講解
一下fscanf和fprintf的強大之處。

 

1、fscanf(可以從一個文件流中格式化讀出數據,遇到空格或回車就停止)
原型: int fscanf(FILE *stream, const char *format, ...); //fscanf(文件流指針,格式字符串,輸出表列);
參數:
FILE *stream :文件流指針
const char *format, ... :字符串的格式
例子 :

fscanf(fp,"%s %s %d",new1->number,new1->staddress,&new1->price);(這樣寫的話數據輸入到文件中時每個數據中間就會有一個空格)

或者寫成:
fscanf(fp,"%s,%s,%d",new1->number,new1->staddress,&new1->price);(這樣寫的話數據輸入到文件中時每個數據中間就會有一個‘,’)



2、fprintf(可以向一個文件中格式化寫入數據)
原型: int fprintf(FILE *stream, const char *format, ...); //fprintf(文件流指針,格式字符串,輸出表列);
參數:
a、FILE *stream :文件流指針
b、const char *format, ... :字符串的格式

例子 :
fprintf(fp,"%s %s %d\n",new->number,new->staddress,new->price);    //同上

或者寫成:
fprintf(fp,"%s,%s,%d\n",new->number,new->staddress,new->price);  //同上

 

 

下面是代碼:

#include <stdio.h> #include <stdlib.h> #include <errno.h> #include <string.h>

#define LENGTH 100 //數組的大小 typedef struct { char number[LENGTH]; char staddress[LENGTH]; int price; }*node,Node; int main(int argc,char *argv[]) { FILE *fp; fp = fopen("test.txt","a+"); //以讀寫的權限打開文件(如果文件不存在則創建)
    if(fp == NULL) { perror("fopen"); exit(1); } node new,new1; //new用來存放寫入到文件中的數據,new1用來存放從文件中讀出的數據 //為兩個結構體指針分配空間
    new = (node)malloc(sizeof(Node)); new1 = (node)malloc(sizeof(Node)); //清空
    memset(new,0,sizeof(node)); memset(new1,0,sizeof(node)); strcpy(new->number,"20170816"); strcpy(new->staddress,"南寧"); new->price = 100; fprintf(fp,"%s %s %d\n",new->number,new->staddress,new->price); //格式化寫入數據到文件中
fseek(fp, 0, SEEK_SET); //文件指針重置,因為上面把數據寫入文件的時候已經把文件流指針定位到文件尾了,所以要重新定位到文件頭 fscanf(fp,"%s %s %d",new1->number,new1->staddress,&new1->price);//格式化從文件中讀出數據 printf("%s %s %d\n",new1->number,new1->staddress,new1->price); //釋放兩個結構體指針 free(new); free(new1); fclose(fp); //關閉文件 return 0; }

 

這是我在ubuntu上運行的結果:

屏幕上的輸出:

 

打開test.txt文件中的內容:


免責聲明!

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



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