Loading... ## 格式化的读写 函数调用: > fprintf(文件指针,格式字符串,输出表列); //写(打印到文件) > > fscanf(文件指针,格式字符串,输入表列); //读(从文件中输入) 函数功能:从磁盘文件中格式化读入或输出字符 注意: 1. 用 fprintf 和 scanf 函数对磁盘文件读写使用方便,容易理解,但在输入是要将ASCII码转换为二进制形式,在输出时将二进制形式转换成字符,花费时间较多。(便于查看,但效率低) 2. 在内存与磁盘频繁交换数据的情况下,最好不用 fprintf 和 fscanf 函数,而使用 fread 和 fwrite 函数。(将数据原样交换,不易查看,效率高) ##### fprintf 格式化 写操作 案例: * 重写我们的hero.txt文件 ```C #include<stdio.h> typedef struct { char name[16];//名字 int deff;//防御 int atk;//攻击 }HERO; int main(int argc, char* argv[]) { HERO hero[] = { {"德玛西亚",80,60}, {"盲僧",90,80}, {"校法",45,84}, {"小炮",50,90} }; int n = sizeof(hero) / sizeof(hero[0]); int i = 0; FILE* fp = NULL; fp = fopen("hero.txt", "w"); if (fp == NULL) { perror("fopen"); return 0; } //格式化方式写 for (i = 0; i < n; i++) { fprintf(fp, "英雄:%s 防御:%d 攻击:%d\n", hero[i].name, hero[i].deff, hero[i].atk); } fclose(fp); return 0; } ``` * 我们得到了一个让我们看起来很不错的文本 ![](https://blog.fivk.cn/usr/uploads/2021/02/2894010143.png) ##### fscanf格式化 读操作 读的前提是要知道文件的格式,比如我们的hero文件格式是英雄:%s 防御:%d 攻击:%d\n (不要忘记换行符) * 我们现在来读取hero.txt ```C #include<stdio.h> typedef struct { char name[16];//名字 int deff;//防御 int atk;//攻击 }HERO; int main(int argc, char* argv[]) { HERO hero[4]; int n = sizeof(hero) / sizeof(hero[0]); int i = 0; FILE* fp = NULL; fp = fopen("hero.txt", "r"); if (fp == NULL) { perror("fopen"); return 0; } for (i = 0; i < n; i++) { fscanf(fp, "英雄:%s 防御:%d 攻击:%d\n", \ hero[i].name, &hero[i].deff, &hero[i].atk); //记住这里要取地址 } for (i = 0; i < n; i++) { printf("英雄:%s 防御:%d 攻击:%d\n", \ hero[i].name, hero[i].deff, hero[i].atk); } fclose(fp); return 0; } ``` * 我们把hero.txt的数值赋给了数组,我们就可以 输出/使用 了 ![](https://blog.fivk.cn/usr/uploads/2021/02/4090193149.png) 最后修改:2021 年 02 月 21 日 © 禁止转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏