格式化读写 ‘fscanf()’、’fprintf()’
格式化读 ‘fsanf()’
用于从指定文件
中读取 格式化字符串
。
#include <stdio.h> ... int fscanf(FILE *stream, const char *format, ...);
用法: 跟scanf()
一样,只是多了 stream 参数
fscanf(fp, "%d-%d-%d", &year, &month, &day);
返回值
- 调用成功,返回值是
成功获取 并 填充到 附加参数中
的个数。 - 调用失败,返回值
小于 附加参数的 个数
(甚至是0
)。 - 如果
读取
到标准输入流的结尾处
,则返回 EOF
。
格式化读 ‘fprintf()’
用于打印格式化字符串
到指定的文件
。
#include <stdio.h> ... int fprintf(FILE *stream, const char *format, ...);
用法: 跟printf()
一样,只是多了 stream 参数
fprintf(fp, "I love You!\n"); fprintf(fp, "Today is %d-%d-%d\n", 2021, 1, 22);
返回值
- 调用
成功
,返回值是实际 打印的 字符数
(不包含表示字符串结束的 ‘\0’); - 调用
失败
,返回值是一个负数
。
实例
格式化文件读写
#include <stdio.h> #include <stdlib.h> #define PATH "./lines.txt" int main(void){ // 打开文件 FILE *fpw = fopen(PATH,"w"); if (fpw == NULL)exit(1); // 文件写入打开失败 // 格式化写入文件 fprintf(fpw, "Today is %d-%d-%d\n", 2021, 1, 22); // 关闭文件 fclose(fpw); // 打开文件 FILE *fpr = fopen(PATH,"r"); if (fpr == NULL)exit(2); // 文件读取打开失败 // 读取文件 int year,month,day; fscanf(fpr,"Today is %d-%d-%d",&year,&month,&day); printf("%d-%d-%d\n",year,month,day); // 关闭读取文件 fclose(fpr); return 0; }
二进制读写 ‘fread()’、’fwrite()’
格式化读 ‘fread()’
用于从指定的文件
中读取 指定尺寸
的数据。
#include <stdio.h> ... size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
参数:
- ptr:指向
存放数据空间的 指针
,该内存块的尺寸最小
应该是size * nmemb
个字节 - size:要读取的每个元素的尺寸
- nmemb:要读取的元素个数
- stream:是一个 FILE 对象的指针
返回值
- 成功:
实际 读取
到的元素个数 (nmemb)
;
- 失败:
- 返回比
nmemb
参数的值小
,表示可能读取到文件末尾
或者有错误发生
(可以使用 feof 函数或 ferror 函数进一步判断)。
- 返回比
格式化读 ‘fwrite()’
将指定 尺寸
的数据写入
到指定的文件中。
#include <stdio.h> ... size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
参数:
- ptr:指向
存放数据空间的 指针
,该内存块的尺寸最小
应该是size * nmemb
个字节 - size:要
写入
的每个元素的尺寸 - nmemb:要
写入
的元素个数 - stream:是一个 FILE 对象的指针
返回值
- 成功:
- 返回
实际 写入
到文件中的元素个数(nmemb)
;
- 返回
- 失败:
- 如果返回值与
nmemb 参数
的值不同
,则有错误发生
。
- 如果返回值与
实例
#include <stdio.h> #include <stdlib.h> #define PATH "data.txt" struct Data { int year; int month; int day; }; int main(void){ // 打开文件 FILE *fpw = fopen(PATH,"w"); if (fpw == NULL)exit(1); // 打开写入文件失败 // 以二进制形式写入结构体到文件 struct Data *data_write = (struct Data *)malloc(sizeof(struct Data)); data_write->year = 2021; data_write->month = 1; data_write->day = 21; fwrite(data_write,sizeof(struct Data),1,fpw); free(data_write); // 关闭文件 fclose(fpw); // 打开文件 FILE *fpr = fopen(PATH,"r"); if (fpw == NULL)exit(2); // 打开读取文件失败 // 以二进制形式读取文件 struct Data *data_read = (struct Data *)malloc(sizeof(struct Data)); fread(data_read,sizeof(struct Data),1,fpr); printf("%d-%d-%d\n",data_read->year,data_read->month,data_read->day); free(data_read); return 0; }
上一篇
【C语言】文件随机读取
【C语言】文件随机读取
版权声明:《 【C语言】文件操作(下部) 》为明妃原创文章,转载请注明出处!
最后编辑:2021-1-23 02:01:59