欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C语言学习记录

程序员文章站 2022-07-15 09:05:23
...

fwrite

作用

向文件中写入数据块

参数
  1. 数据来源的内存地址,可以用指针或者&
  2. 要写入的每个数据项的字节数,一般可以用sizeof得到
  3. 要写入的项数(count)
  4. 目标文件的文件指针
返回值

返回实际写入的项数,可以据此使用for循环进行少量多次的写入,并判断循环的结束

内容基本来自百度百科,稍作整理
代码说明
#include <stdio.h>
#include <stdlib.h>

typedef struct//定义了一个结构体
{
	char name[20];
	int age;
	char email[50];
}person;
void getInfo(person *pInfo)//填充结构体的函数
{
	printf("请输入姓名\n");
	gets_s(pInfo->name, 19);
	printf("请输入年龄\n");
	scanf_s("%d", &pInfo->age);
	getchar();
	printf("请输入邮箱\n");
	gets_s(pInfo->email,49);
}
void putInfo(person *pInfo)//解析结构体的函数
{
	printf("%s\n", pInfo->name);
	printf("%d\n", pInfo->age);
	printf("%s\n", pInfo->email);
}

int main()
{
//利用fwrite写入结构体
person people[2]={NULL};//将两个结构体初始化后乱码消失
char fileA[50];
FILE *pfOut = NULL;
errno_t errIn;
puts("请输入文件要保存的位置");
gets_s(fileA, 49);
errIn = fopen_s(&pfOut, fileA, "wt");//vs提供了fopen_s函数代替fopen
	if (errIn!=0)
	{
		puts("文件打开/创建失败,请检查后重试");
		exit(0);
	}
	getInfo(&people[0]);
	getInfo(&people[1]);
	int count = fwrite(&people, sizeof people[0], 2, pfOut);//利用sizeof获取数据块的字节数
	printf("%dmmm", sizeof people[0]);//输出后可以给后边的fread使用
	if (count==2)//一步检查,其实好像没必要,应该搞成出错后提醒
	{
		puts("success");
	}
	fclose(pfOut);

	//利用fread对上边写的文件进行读取
	//与上边的变量可能冲突,故只能同时运行一个
    /*FILE *pfIn = NULL;
    errno_t err;
    person people[10];
    err = fopen_s(&pfIn, "C:\\Users\\dang\\Desktop\\b.txt", "rt");//vs提供了fopen_s函数代替fopen
    //C:\Users\dang\Desktop\b.txt为运行时采用的地址
	if (err!=0)
	{
		puts("文件读取失败,请检查后重试");
		exit(0);
	}
	unsigned int count;
	for (int i=0;i<10;i++)
	{
		count = fread(&people[i], 76,1, pfIn);
		if (count!=1)//对数据块逐个读取
		{
			if (count==0)//读取完成后跳出循环
			{
				puts("文件读取完成");
				break;
			}
			puts("内容读取失败,请检查后重试");
		}
		putInfo(&people[i]);
	}*/
getchar();
}