fscanf和fprintf和fwrite函数详解

举报
芒果_Mango 发表于 2022/03/28 10:30:40 2022/03/28
【摘要】 大家好,我是芒果,一名非科班的在校大学生。对C/C++、数据结构、Linux及MySql、算法等领域感兴趣,喜欢将所学知识写成博客记录下来。 希望该文章对你有所帮助!如果有错误请大佬们指正!共同学习交流作者简介:CSDN C/C++领域新星创作者https://blog.csdn.net/chuxinchangcun?type=blog掘金LV3用户 https://juejin.cn/us...

大家好,我是芒果,一名非科班的在校大学生。对C/C++、数据结构、Linux及MySql、算法等领域感兴趣,喜欢将所学知识写成博客记录下来。 希望该文章对你有所帮助!如果有错误请大佬们指正!共同学习交流

作者简介:

fprintf-格式化写入函数

fprintf

image-20220310224035586


printf

image-20220310224049845

fprintf 和printf格式一致,只不过fprintf多了一个文件指针的参数


例1

struct S
{
    int n ;
    double d;
};
int main()
{
    struct S s = {100,3.14};//把s的数据写到文件中
    //打开文件
    FILE* pf = fopen("data.txt","w");
    if(NULL == pf)
    {
        perror("fopen");
        return -1;
    }
    //写文件
    fprintf(pf,"%d %lf",s.n,s.d);
    //关闭文件
    fclose(pf);
    return 0;
}

image-20220310224058056


写入多个数据

struct S
{
	char name[20];
	int age;
};
int main()
{
	struct S s[3] = { {"Mango",19},{"Lemon",20},{"Orange",21} };

	//打开文件
	FILE* pf = fopen("data.txt", "w");
	if (NULL == pf)
	{
		perror("fopen");
		return -1;
	}
	//格式化写入
	int i = 0;
	for (i = 0; i < 3; i++)
	{
		fprintf(pf, "%s %d", s[i].name, s[i].age);//把结构体三个数据写到文件中
	}
	fclose(pf);
	pf = NULL;
}

fscanf - 格式化读取数据

fscanf

image-20220310224130208


scanf

image-20220310224140271


scanf和fscanf的区别:fscanf的参数多了一个文件指针

上面fprintf写入数据到txt文件中后,使用fscanf读取出来

struct S
{
    int n ;
    double d;
};
int main()
{
    struct S s ={0};
    //打开文件
    FILE* pf = fopen("data.txt","r");
    if(NULL == pf)
    {
        perror("fopen");
        return -1;
    }
    //读文件
   fscanf(pf,"%d %lf",&s.n,&s.d);
    //看是否读取成功
    printf("%d %lf",s.n,s.d);
    //关闭文件
    fclose(pf);
    return 0;
}

image-20220310224204196


fwrite - 以二进制形式写入

image-20220310224210798

  • 第一个参数:要被写入的数据的地址
  • 第二个参数:要被写入的数据的大小(字节数)
  • 第三个参数:要写入的个数
  • 第四个参数:文件指针
  • 以二进制形式写入->所以打开文件方式为:wb
  • 写count个大小为size的数据到流中

image-20220310224219802


例子1

struct S
{
   int n ;
    double d;
    char name[10];
};
int main()
{
    struct S s = {100,3.14,"zhangsan"};
    //以二进制形式打开文件
    FILE* pf = fopen("data.txt","wb");
    if(NULL == pf)
    {
        perror("fopen");
        return -1;
    }
    //写文件-二进制形式写
    fwrite(&s,sizeof(s),1,pf);
    //关闭文件
    fclose(pf);
    pf = NULL;
    return 0;
}

结果:

image-20220310224229122

这是以二进制形式写进去,所以看不懂,要使用二进制形式读取出来


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。