顺序读写函数介绍 fgets和fputs,fgetc和fputc等的区别详解

fgetc和fputc

fgetc函数:

fgetc从指定的文件流中读取下一个字符。
如果文件到达结尾或发生错误,则返回EOF
fgetc通常用于读取二进制文件或文本文件。
fputc函数:
fputc将指定的字符写入到指定的文件流中。
它返回写入的字符,如果写入成功,或者在写入时发生错误,返回EOF。
fputc通常用于写入二进制文件或文本文件。
总结:fgetc用于从文件中读取字符,而fputc用于向文件中写入字符。这两个函数在处理文件时非常有用,可以单独使用或结合其他文件操作函数一起使用。

1.fputs:

该函数用于将字符串写入文件。接受两个参数,
第一个参数是要写入的字符串
第二个参数是目标文件指针
如果错误访问这个函数会返回一个非负值表示成功,或者 EOF(表示出现错误)
举个例子:

int main()
{
	FILE* fp = fopen("file.txt", "w");
	if (fp == NULL) {
		perror("fopen");//打印错误原因
		return;
	}
	fputs("Hello, World!", fp);
	fclose(fp);
	fp= NULL;
	return 0;
}

在这里插入图片描述

2.fgets:

该函数用于从文件读取一行。fgets 也接受三个参数,
第一个参数是用于存储读取的字符串的缓冲区
第二个参数是最大读取字符数(包括空字符 \0)
第三个参数是目标文件指针。
这个函数返回 str 参数(即缓冲区),如果成功,或者 NULL(表示遇到文件结束或者出现错误)。
在这里插入图片描述

文件中有两行数据进行读取

int main()
{
	FILE* pf = fopen("fgets.txt", "r");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	char arr[20] = { 0 };
	fgets(arr,20, pf);
	printf("%s", arr);
	fgets(arr, 20, pf);
	printf("%s", arr);
	fclose(pf);
	pf = NULL;
	return 0;
}

在这里插入图片描述
注意:fgets在读取时最后会加上一个\0因此当数组为9个时最多读取8个
举个栗子:
假如把文件里有1~9的数字
在这里插入图片描述
代码读取:

int main()
{
	FILE* pf = fopen("zuida.txt", "r");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	char arr[9] = { 0 };
	fgets(arr, 9, pf);
	printf("%s", arr);
	fclose(pf);
	pf = NULL;
	return 0;
}

结果:
在这里插入图片描述
调试可得字符’9‘并没有被读入数组
在这里插入图片描述

3.fprintf

用于将格式化数据写入到指定的文件中

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

int main()
{
	struct S s = { 6,6.9,"zhangsan" };
	FILE* pf = fopen("data.txt", "w");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	
	fprintf(pf,"%d\n%f\n%s\n", s.n, s.m, s.arr);
	fclose(pf);
	pf = NULL;
	return 0;
}

在这里插入图片描述
将pf改为输出流也可以打印在屏幕上
在这里插入图片描述

4.fscanf

函数用于从文件中读取格式化的数据
在这里插入图片描述
进行读取

struct S {
	int n;
	float m;
	char arr[200];
};

int main()
{
	struct S s = {0};
	FILE* pf = fopen("data.txt", "r");//读取’r'
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	fscanf(pf,"%d %f %s", &(s.n), &(s.m), s.arr);
	printf("%d %f %s\n", s.n, s.m, s.arr);
	fclose(pf);
	pf = NULL;
	return 0;
}

在这里插入图片描述

sprintf

是一个在 C 语言中常用的函数,用于将格式化的数据写入字符串
用处将一个结构体转化为字符串打印

struct S {
	int n;
	float m;
	char arr[200];
};
int main()
{
	struct S s = { 100,3.3,"zhahngcsan"};
	char brr[100];
	sprintf(brr,"%d %f %s", s.n, s.m, s.arr);
	printf("%s", brr);
	return 0;
}

在这里插入图片描述

fwrite以二进制的方式写入数据到文件里

int main()
{
	int arr[] = { 1,2,3,4,5,6 };
	FILE* pf = fopen("tate.txt", "wb");
	if (pf == NULL)	
	{
		perror("fopen");
		return 1;
	}
	fwrite(arr, sizeof(int), 6, pf);
	fclose(pf);
	pf = NULL;
	return 0;
}

但是由于二进制记事本不能读懂
在这里插入图片描述
这个时候使用

fread

这个时候使用fread以二进制形式读取

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

在这里插入图片描述

sscanf

是C语言中的一个函数,用于从字符串中读取格式化的数据。
简单代码演示

int main()
{
	char str[] = "10,3.14";
	int a;
	float b;
	sscanf(str, "%d,%f", &a, &b);
	printf("%d %f\n", a, b);
	return 0;
}

在这里插入图片描述
sscanf和sprintf代码演示

struct S {
	int n;
	float m;
	char arr[200];
};
int main()
{
	struct S s = { 100,3.3333,"zhahngcsan"};//结构体赋值
	char brr[100];
	sprintf(brr,"%d %f %s", s.n, s.m, s.arr);//将结构体中的数据转换为字符串
	printf("%s\n", brr);//打印转化的字符串
	struct S t = { 0 };
	sscanf(brr, "%d %f %s", &(t.n), &(t.m), &(t.arr));//再将字符串提取到一个新的结构体中打印
	printf("%d%f%s",t.n,t.m,t.arr);
	return 0;
}

在这里插入图片描述
对比
scanf-针对标准输入流(stdin) 的格式化输入函数
printf -针对标准输出流(stdout) 的格式化输出函数
fscanf -针对所有输入流的格式化输入函数
fprintf-针对所有输出流的格式化输出函数
sscanf-从字符中读取格式化的数据
sprintf-把格式化的数据转换成字符串

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值