IO进程---day3

发布于:2024-10-17 ⋅ 阅读:(10) ⋅ 点赞:(0)

1、完成标准io的单字符实现两个文件的拷贝;

#include<myhead.h>

//标准io的单字符现两个文件的拷贝;
int main(int argc, const char *argv[])
{
	//判断是否有3个文件传入
	if(3 != argc){
		fputs("input file error\n",stderr);
		return -1;
	}

	//打开源文件
	FILE *src = fopen(argv[1] , "r");
	//判断源文件是否打开成功
	if(src == NULL){
		perror("fopen argv[1] error");
		return -1;
	}

	//打开目标文件
	FILE *dest = fopen(argv[2] , "w");
	//判断目标文件是否打开成功
	if(dest == NULL){
		perror("fopen argv[2] error ");
		return -1;
	}

	//定义变量读取数据
	while(1){
		int res = fgetc(src);
		if(res == EOF){
			break;
		}
		fputc(res, dest);  //将变量的数据写入目标文件中
		printf("读取到的数据为:%c\n",res);
	}
	
	//关闭文件
	fclose(src);
	fclose(dest);
	return 0;
}

 2、完成标准io的字符串实现两个文件的拷贝;

#include<myhead.h>

//标准io的字符串实现两个文件的拷贝

int main(int argc, const char *argv[])
{
	//判断是否有3个文件传入
	if(3 != argc){
		fputs("input file error\n",stderr);
		return -1;
	}

	//打开源文件
	FILE *src = fopen(argv[1] , "r");
	//判断源文件是否打开成功
	if(src == NULL){
		perror("fopen argv[1] error");
		return -1;
	}

	//打开目标文件
	FILE *dest = fopen(argv[2] , "w");
	//判断目标文件是否打开成功
	if(dest == NULL){
		perror("fopen argv[2] error ");
		return -1;
	}

	//定义字符数组接收读取源文件的数据
	char arr[20]="";
	while(1){
		char *res = fgets(arr,sizeof(arr),src);	
		if(res == NULL){
			break;
		}
		fputs(arr, dest);  //将变量的数据写入目标文件中
		printf("读取到的数据为:%s\n",res);
	}
	
	//关闭文件
	fclose(src);
	fclose(dest);
	return 0;
}

 3、完成标准io的格式化实现两个文件的拷贝;

#include<myhead.h>

//标准io的格式化实现两个文件的拷贝

int main(int argc, const char *argv[])
{
	//判断是否有3个文件传入
	if(3 != argc){
		fputs("input file error\n",stderr);
		return -1;
	}

	//打开源文件
	FILE *src = fopen(argv[1] , "r");
	//判断源文件是否打开成功
	if(src == NULL){
		perror("fopen argv[1] error");
		return -1;
	}

	//打开目标文件
	FILE *dest = fopen(argv[2] , "w");
	//判断目标文件是否打开成功
	if(dest == NULL){
		perror("fopen argv[2] error ");
		return -1;
	}

	//定义字符数组接收读取源文件的数据
	char a;
	while(1){
		int res = fscanf(src,"%c",&a);	
		if(res<1){
			break;
		}
		fprintf(dest,"%c",a);  //将变量的数据写入目标文件中
		printf("读取到的数据为:%c\n",a);
	}
	
	//关闭文件
	fclose(src);
	fclose(dest);
	return 0;
}

 

 

4、完成标准io的模块化实现两个文件的拷贝;

#include<myhead.h>

//标准io的模块化实现两个文件的拷贝
int main(int argc, const char *argv[])
{
	//判断是否有3个文件传入
	if(3 != argc){
		fputs("input file error\n",stderr);
		return -1;
	}

	//打开源文件
	FILE *src = fopen(argv[1] , "r");
	//判断源文件是否打开成功
	if(src == NULL){
		perror("fopen argv[1] error");
		return -1;
	}

	//打开目标文件
	FILE *dest = fopen(argv[2] , "w");
	//判断目标文件是否打开成功
	if(dest == NULL){
		perror("fopen argv[2] error ");
		return -1;
	}

	//定义字符数组接收读取源文件的数据
	char arr[20]="";
	while(1){
		int res = fread(arr,1,sizeof(arr),src);	
		if(res<1){
			break;
		}
		fwrite(arr,1,res, dest);  //将变量的数据写入目标文件中
		printf("读取到的数据为:%s\n",arr);
	}
	
	//关闭文件
	fclose(src);
	fclose(dest);
	return 0;
}

 5、实现注册和登录功能,将注册账号和密码存储到文件中,登录时遍历文件如果存在就登录成功否则登录失败

#include<myhead.h>

void menu();
void login_system();
int usr_login();
int usr_register();

int main(int argc, const char *argv[])
{
	
	login_system();
	return 0;
}

void menu()
{
	printf("\t\t********用户登录系统********\n");
	printf("\t\t1、登录\n");
	printf("\t\t2、注册\n");
	printf("\t\t3、退出系统\n");
}

//登录函数
int usr_login()
{
	//定义变量账号和密码
	char id[20]="";
	char password[20]="";
	printf("请输入登录账号:");
	scanf("%s",id);
	printf("请输入登录密码:");
	scanf("%s",password);

	//打开文件读取数据
	FILE *fp = fopen("./user.txt" , "r");
	//判断用户文件是否打开成功
	if(fp == NULL){
		perror("fopen user.txt error");
		return -1;
	}

	//定义两个字符数组接收用户文件的数据
	char arr[20]="";
	char brr[20]="";
	while(1){
		int res=fscanf(fp,"%s%s",arr,brr);
		if(res==EOF)
		break;
		if((strcmp(id,arr)==0)&&(strcmp(password,brr)==0))   //判断是否登录成功
		{
			printf("登录成功\n");
			return -1;
		}
		else
		{
			printf("登录失败\n");
			return -1;
		}
	}
	fclose(fp);
}

//注册函数
int usr_register()
{
	//定义变量账号和密码
	char re_id[20]="";
	char re_password[20]="";
	printf("请输入注册账号:");
	scanf("%s",re_id);
	printf("请输入注册密码:");
	scanf("%s",re_password);

	//打开文件写入数据
	FILE *fp = fopen("./user.txt" , "a+");
	//判断用户文件是否打开成功
	if(fp == NULL){
		perror("fopen user.txt error");
		return -1;
	}

	fprintf(fp,"%s %s\n",re_id,re_password);

	fclose(fp);
	printf("注册成功\n");


}

void login_system()
{
	int option;
	while (1)
	{
		menu();
		printf("请输入你的选择:");
		scanf("%d", &option);
		getchar(); // 清除输入缓冲区中的换行符
		switch (option)
		{
		case 1:				//登录
			usr_login();
			break;
		case 2:			   //注册
			usr_register();
			break;
		case 3:
			printf("退出系统\n");   // 退出系统
			exit(0);
		default:
			printf("输入有误,请重新输入\n");
			break;

		}
	}
}

效果展示: