C语言文件操作学习【2】—— 文件的顺序读写

顺序读写函数介绍

函数名功能适用于
fgetc字符输入函数所有输入流
fputc字符输出函数所有输出流
fgets文本行输入函数所有输入流
fputs文本行输出函数所有输出流
fscanf格式化输入函数所有输入流
fprintf格式化输出函数所有输出流
fread二进制输入文件
fwrite二进制输出文件

上面说的适用于所有输入流⼀般指适用于标准输入流和其他输入流(如文件输入流);所有输出流⼀般指适用于标准输出流和其他输出流(如文件输出流)。

顺序读写函数的函数参数

fgetc函数参数

在这里插入图片描述
使用fgetc函数从标准输入流中读取数据
fgetc函数在读取失败的时候会返回EOF
如果流已经在文件末尾的时候调用fgetc函数,fgetc函数会返回一个EOF,同时设置一个状态值说明现在已经遇到文件末尾了。
执行代码前,先创建记事本并更名为:data.txt,并写入信息:
在这里插入图片描述

下面我们看一段代码学习fgetc函数的使用:

int main()
{
	FILE* pf = fopen("data.txt", "r");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}

	//读文件

	int ch = fgetc(pf);
	printf("%c\n", ch);

	fclose(pf);
	pf = NULL;
	return 0;
}

代码结果如图:
在这里插入图片描述

fputc函数参数

在这里插入图片描述
第一个参数:要写的字符,第二个参数:要写入文件的指针

下面我们看一段代码学习fputc函数的使用:

int main()
{
	FILE* pf = fopen("test.txt", "w");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	//写文件

	char ch = 'a';
	for (; ch <= 'z'; ch++)
	{
		fputc(ch, pf);
	}

	fclose(pf);
	pf = NULL;
	return 0;
}

执行完代码我们打开对应文件,可以发现字符已经成功写入:
在这里插入图片描述

fgets函数参数

在这里插入图片描述
fgets函数:最多读取num个字符放在str里面
如果遇到文件末尾或者读取失败都会返回空指针
执行代码前,先创建记事本并更名为:data.txt,并写入信息:
在这里插入图片描述

下面我们看一段代码学习fgets函数的使用:

int main()
{
	FILE* pf = fopen("data.txt", "r");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	//读文件
	char arr[20] = "xxxxxxxxxxxxxxxx";
	fgets(arr,20,pf);
	printf("%s\n", arr);

	fclose(pf);
	pf = NULL;
	return 0;
}

代码结果如图:
在这里插入图片描述

fputs函数参数

在这里插入图片描述
第一个参数:要写入的字符信息;第二个参数:要写入的流
下面我们看一段代码学习fputs函数的使用:

int main()
{
	FILE* pf = fopen("data.txt", "w");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	//写文件
	fputs("qasfsaas", pf);

	fclose(pf);
	pf = NULL;
	return 0;
}

代码执行完毕,打开对应记事本,对应的信息已经成功写入。
在这里插入图片描述

fscanf函数参数

在这里插入图片描述
下面我们看一段代码学习fscanf函数的使用:

struct S
{
	int n;
	float f;
	char arr[20];
};
int main()
{
	struct S s = { 100,3.14f,"zhangsan" };

	FILE* pf = fopen("data.txt", "r");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	fscanf(pf,"%d %f %s", &(s.n), &(s.f), s.arr);
	printf("%d %f %s", s.n, s.f, s.arr);
	fclose(pf);
	pf = NULL;

	return 0;
}

代码结果如图:
在这里插入图片描述

fprintf函数参数

在这里插入图片描述
下面我们看一段代码学习fprintf函数的使用:

struct S
{
	int n;
	float f;
	char arr[20];
};
int main()
{
	struct S s = { 100,3.14f,"zhangsan" };

	FILE* pf = fopen("data.txt", "w");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	//写文件
	fprintf(pf, "%d %f %s", s.n, s.f, s.arr);

	fclose(pf);
	pf = NULL;

	return 0;
}

代码执行完毕,打开对应记事本,对应的信息已经成功写入。
在这里插入图片描述

fwrite函数参数

在这里插入图片描述
下面我们看一段代码学习fwrite函数的使用:

int main()
{
	int arr[10] = { 1,2,3,4,5,6,7 };

	FILE* pf = fopen("data.txt", "wb");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	fwrite(arr, sizeof(int), 7, pf);

	fclose(pf);
	pf = NULL;
	return 0;
}

代码执行完毕,打开对应记事本,发现是一段乱码。因为记事本无法识别二进制信息,我们可以使用fread函数验证。
在这里插入图片描述

fread函数参数

在这里插入图片描述
下面我们看一段代码学习fread函数的使用:

int main()
{
	int arr[10] = { 1,2,3,4,5,6,7 };

	FILE* pf = fopen("data.txt", "rb");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	fread(arr, sizeof(int), 7, pf);
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		printf("%d\n", arr[i]);
	}

	fclose(pf);
	pf = NULL;
	return 0;
}

代码结果如图:
在这里插入图片描述

我们发现打印出的信息和我们写入一致,故结果正确。

sscanf、sprintf函数参数

在这里插入图片描述
在这里插入图片描述

sscanf 功能:从字符中读取格式化的数据
sprintf 功能:将格式化的数据,转换成一个字符串

下面我们看一段代码学习sscanfsprintf函数的使用:

struct S
{
	int n;
	float f;
	char arr[20];
};

int main()
{
	struct S s = { 100,3.14f,"zhangsan" };
	char arr[30] = { 0 };
	//把格式化的数据转换成字符串
	sprintf(arr, "%d %f %s", s.n, s.f, s.arr);
	printf("%s\n", arr);

	//从arr这个字符串中提取出格式化的数据
	struct S t = { 0 };
	sscanf(arr, "%d %f %s", &(t.n), &(t.f), t.arr);
	printf(arr, "%d %f %s", t.n, t.f, t.arr);
	return 0;
}
  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值