• 5.6 标准I/O(格式化输入输出)


    目录

    格式化输出

     格式化输入

    笔记

    流的刷新

    流的定位:

    格式化输出

    格式化输入

    标准IO练习


    格式化输出

    1. #include
    2. int printf(const char *fmt, …);
    3. int fprintf(FILE *stream, const char *fmt, …);
    4. int sprintf(char *s, const char *fmt, …);
    5. //成功时返回输出的字符个数;出错时返回EOF
    6. //使用起来很方便,强烈推荐!
    1. //以指定格式 “年-月-日” 分别写入文件和缓冲区
    2. int year, month, date;
    3. FILE *fp;
    4. char buf[64];
    5. year = 2014; month = 10; date = 26;
    6. fp = fopen(“test.txt”, “a+”);
    7. fprintf(fp, “%d-%d-%d\n”, year, month, date);
    8. sprintf(buf, “%d-%d-%d\n”, year, month, date);

     格式化输入

    1. int fscanf(FILE *stream, const char *format, ...);
    2. int sscanf(const char *str, const char *format, ...);

    笔记

    流的刷新

     int fflush(FILE *fp);

    成功时返回0;出错时返回EOF

    将流缓冲区中的数据写入实际的文件

    Linux下只能刷新输出缓冲区,输入缓冲区丢弃

    如果输出到屏幕使用fflush(stdout)

    流的定位:

    long ftell(FILE *stream);

    long fseek(FILE *stream, long offset,  int whence);

    void rewind(FILE *stream);

    fseek 参数whence参数:SEEK_SET/SEEK_CUR/SEEK_END

    SEEK_SET 从距文件开头 offset 位移量为新的读写位置

    SEEK_CUR:以目前的读写位置往后增加 offset 个位移量

    SEEK_END:将读写位置指向文件尾后再增加 offset 个位移量

    ffset参数:偏移量,可正可负

    注意事项:

    1.文件的打开使用a模式 fseek无效

    2.rewind(fp) 相当于 fseek(fp,0,SEEK_SET);

    3.这三个函数只适用2G以下的文件

    编译告警错误:

    ffseek_t.c:13:11: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘long int’ [-Wformat=]

        printf("current fp=%d\n",ftell(fp));

    表示参数类型不匹配

    格式化输出

    int fprintf(FILE *stream, const char *fmt, …);

    int sprintf(char *s, const char *fmt, …);

    成功时返回输出的字符个数;出错时返回EOF

    格式化输入

    int fscanf(FILE *stream, const char *format, ...);

    int sscanf(const char *str, const char *format, ...);

    重点掌握sprintf 和sscanf

    编译告警:

    wsystime.c:16:13: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘time_t {aka long int}’ [-Wformat=]

          printf("ctime=%d\n",ctime);

    表示类型不匹配 期望的是int但是参数传的是time_t

    解决办法:在参数前加强制类型转换

    标准IO练习

    time()用来获取系统时间(秒数)

    time_t time(time_t *seconds) 1970.1.1 0:0:0

    localtime()将系统时间转换成本地时间

    struct tm *localtime(const time_t *timer)

    struct tm {

       int tm_sec;         /* 秒,范围从 0 到 59                */

       int tm_min;         /* 分,范围从 0 到 59                */

       int tm_hour;        /* 小时,范围从 0 到 23                */

       int tm_mday;        /* 一月中的第几天,范围从 1 到 31                    */

       int tm_mon;         /* 月份,范围从 0 到 11                */

       int tm_year;        /* 自 1900 起的年数                */

       int tm_wday;        /* 一周中的第几天,范围从 0 到 6                */

       int tm_yday;        /* 一年中的第几天,范围从 0 到 365                    */

       int tm_isdst;       /* 夏令时                        */    

    };

    注意:

       int tm_mon;        获取的值要加1是正确的月份

       int tm_year;        获取的值加1900是正确的年份

    获取文件内的所有行数量:

       while(fgets(buf,32,fp)!=NULL){

              if(buf[strlen(buf)-1] =='\n'){  //注意判断是否是一行结束

                   linecount++;

              }

    }

    写完文件记得fflush ,写到磁盘里面去。

    标准IO磁盘文件的缓冲区一般为4096

    注意和标准输出的全缓冲区别,标准输出是1024

  • 相关阅读:
    ios证书类型及其作用说明
    《HelloGitHub》第 90 期
    基于若依ruoyi-nbcio增加flowable流程待办消息的提醒,并提供右上角的红字数字提醒(五)
    EtherCAT转Modbus-TCP协议网关与DCS连接的配置方法
    idea如何关闭项目文件显示的浏览器图标
    【双目视觉】 立体匹配算法原理之“代价函数”
    从零开始的Docker Desktop使用,Docker快速上手 ( ̄︶ ̄) Docker介绍和基础使用
    Apache HttpClient使用和源码分析
    计算机毕业设计ssm+vue基本微信小程序的一起考研学习系统
    jquery获取url参数
  • 原文地址:https://blog.csdn.net/m0_72760584/article/details/130844099