zoukankan      html  css  js  c++  java
  • 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 ",new->number,new->staddress,new->price);    //同上

    或者写成:
    fprintf(fp,"%s,%s,%d ",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
    ",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 ",new1->number,new1->staddress,new1->price); //释放两个结构体指针 free(new); free(new1); fclose(fp); //关闭文件 return 0; }

    这是我在ubuntu上运行的结果:

    屏幕上的输出:

    打开test.txt文件中的内容:

    鉴于本人才疏学浅,所以其中不免有遗漏或者错误,恳请各位博友批评指正。
  • 相关阅读:
    【SICP练习】129 练习3.60
    【SICP练习】128 练习3.59
    【SICP练习】127 练习3.58
    【SICP练习】126 练习3.57
    【SICP练习】125 练习3.56
    【SICP练习】124 练习3.55
    【SICP练习】123 练习3.54
    【SICP练习】122 练习3.53
    【SICP练习】121 练习3.52
    【SICP练习】120 练习3.51
  • 原文地址:https://www.cnblogs.com/wurenzhong/p/7435846.html
Copyright © 2011-2022 走看看