【C语言】文件操作(下部) [ 编程杂谈 ]
大数据男孩 文章 正文
明妃
{{nature("2022-08-14 17:23:19")}}更新格式化读写 '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;
}
[]()
{{nature('2020-01-02 16:47:07')}} {{format('12641')}}人已阅读
{{nature('2019-12-11 20:43:10')}} {{format('9527')}}人已阅读
{{nature('2019-12-26 17:20:52')}} {{format('7573')}}人已阅读
{{nature('2019-12-26 16:03:55')}} {{format('5017')}}人已阅读
目录
标签云
一言
评论 0
{{userInfo.data?.nickname}}
{{userInfo.data?.email}}