C语言文件操作--fputc.fpetc.fgets.fputs.fprintf.fscanf.sscanf.sprintf.fwrite.fread

#define _CRT_SECURE_NO_WARNINGS

//文件操作
//   c语言默认的三个输出流 : stdin标准输入流(键盘)  stdout标准输出流(屏幕)stderr标准错误流(屏幕) 
//   注: 1.以下pf 可换成任意输入输出流
//       2.put函数---与文件操作 "w"模式匹配
//         get函数---与文件操作 "r"模式匹配
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>

void text_fputc(FILE* pf)    //fputc(参数1:int , 参数2:FILE* stream);  参数1是字符对应的ascII码值 .
{							 //将字符依次放入指定流当中,pf也可换成stdout(标准输出流),--在屏幕上打印字符
	int i = 0;
	for (i = 'a'; i <= 'z'; i++)
	{
		fputc(i, pf);          
		fputc(' ', pf);
		fputc('\n', pf);
	}
}

int text_fgetc(FILE* pf)   //int fputc(FILE* stream) 
{
	int ch = fgetc(pf);       
	return ch;
}

void text_fputs(FILE* pf)   //将某一串字符串全部放入pf文件指针维护的文件当中
							//以\0为读取的结束标准
{
	char arr[100] = "zwjzzzzzzz\0aw\nfewf";
	fputs(arr, pf);
	//zz后面含有\0,结果只有\0前部分被读入文件当中
}

void text_fgets(FILE* pf) //fgets:
						  //       (1)若 n <= pf 中一行字符长度 则将FILE* stream 内 n-1个字符读入 arr 中,最后一个字符替成'\0'
						  //       (2)若 n > pf 中一行字符的长度,则将整行放入
						  //       (3)读取字符时,文件当中的位置指针会不断更新并保存指向的位置
                          //当无法在读取的时候返回空指针(NULL)  n ==0 或 EOF
{
	char arr[100] = {0};

	printf("%s",fgets(arr,100,pf));
	//printf("%s", fgets(arr, 2, pf));
	while (fgets(arr, 2, pf) != NULL)   
	{
		printf("%s",arr);
	}
}

void text_fprintf(FILE* pf)  //fprintf比printf多了一个 pf(其可代表任意输出流)
{							 //将特定的数放入指定流当中
	typedef struct S
	{
		char NAME[20];
		int age;
	}S;
	S s = { "张三", 18 };
	fprintf(pf,"%s\n%d \n",s.NAME,s.age);
}

void text_fscanf(FILE* pf)           //fscanf比scanf 多了参数 FILE* stream 其可代表任意输入流
{
	typedef struct S
	{
		char NAME[20];
		int age;
	}S;
	S s = { 0 };
	fscanf(pf,"%s%d",&s.NAME,&s.age);
	printf("%s%d",s.NAME,s.age);
}

void text_sprintf_sscanf()   //sprintf:是将结构体以字符串的形式打印
							 //sscanf: 是将字符串的数据传入结构体
							 //这两个函数针对结构体和字符串
{
	typedef struct S
	{
		char NAME[20];
		int age;
	}S;
	S s = { "张三", 18 };
	char arr[1024];
	sprintf(arr,"%s%d\n",s.NAME,s.age);
	printf("%s",arr);
	S s2 = { 0 };
	sscanf(arr, "%s%d", s.NAME, &s.age);
	printf( "s.NAME:%s\ns.age:%d\n", s.NAME, s.age);
}

void text_fwrite(FILE* pf)  // fwrite(const char* str , size_t , size_t num ,FILE* stream)
							// 1.str:     指向被写入元素的指针
							// 2.size_t:  被写入元素的大小
							// 3.num:     元素个数
							// 4.stream:  被写入的流       -------以二进制形式写入
{
	typedef struct S
	{
		char NAME[20];
		int age;
	}S;
	S s = { "张三", 18 };
	fwrite(&s, sizeof(S), 1, pf); 
}

void text_fread(FILE* pf)   //fread 参数1:所要被读入数据的地址  
						    //      参数2:一次读入字节大小
							//      参数3:一次读入num个   若读取个数不足num 则返回剩余的读取个数
							//      参数4:  输出流
{
	typedef struct S
	{
		char NAME[20];
		int age;
	}S;
	S s = { 0 };
	fread(&s, sizeof(S), 1, pf);
	printf("%s %d",s.NAME,s.age);
}

int main()
{
	//(1)打开文件
	FILE* pf = fopen("data.txt", "w");  //pf 指针用于维护打开文件的内容   第一个引号内的路径表示绝对路径  ./表示当前路径   
										//   ../表示上一级路径
	                                    //"r"打开文件方式 读取文件 --- 若无文件返回空指针
										//"wb"以二进制的形式往流中输入数据
	if (pf == NULL)
	{
		printf("%s\n",strerror(errno)); //打开文件失败则打印错误信息
		return 1;
	}
	//(2)操作文件

	1.测试fputc函数
	text_fputc(pf);

	
	///2.测试fgetc函数
	int x = 12;
	while (x--)
	{
		int ch = text_fgetc(pf);
		printf("%c", ch);
	}


	//3.测试fputs函数
	text_fputs(pf);


	/4.测试fgets函数
	text_fgets(pf);


	/5.测试fprintf函数
	text_fprintf(pf);


	/6.测试fscanf函数
	text_fscanf(pf);


	/7.测试sprintf
	text_sprintf_sscanf();

	/8.测试fwrite函数
	text_fwrite(pf);


	/9.测试fread函数
	text_fread(pf);

	//(3)关闭文件
	fclose(pf);
	pf = NULL;
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值