IO线程day2

文章详细介绍了如何使用C语言进行文件读写操作,包括从一个文件复制到另一个文件以及实现简单的注册和登录功能,通过命令行菜单进行选择。
摘要由CSDN通过智能技术生成

 

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	if(argc != 3)  	//判断外部参数	
	{
		printf("The terminal format is incorrect\n");
		return -1;
	}
	//定义文件指针
	FILE * fp = NULL;
	FILE * fq = NULL;
	//以只读的形式打开文件
	if((fp = fopen(argv[1],"r")) == NULL)
	{
		perror("fopen error");
		return -1;
	}
	//以只写的形式打开文件
	if((fq = fopen(argv[2],"w")) == NULL)
	{
		perror("fopen error");
		return -1;
	}
	char buf[100]; 	//定义一个文件搬运工
	while(1)
	{
		fread(buf, sizeof(buf), 1, fp);
   		fwrite(buf, sizeof(buf), 1, fq);
		if(feof(fp))
		{
			printf("读取到文件结尾\n");
			break;
		}
		if(ferror(fp))
		{
			printf("读取失败\n");
			break;
		}
	}
	//关闭文件
	fclose(fp);
	fclose(fq);
 
	printf("拷贝成功\n");
	return 0;
}

 

 

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

//定义注册函数
int do_register()
{
	//1.以追加形式打开文件
	FILE * wfp=NULL;
	char userName_reg[20]; //账号
	char pwd_reg[20];      //密码

	//提示输出注册账号和密码
	printf("please enter uesrname:");
	fgets(userName_reg,sizeof(userName_reg),stdin);

	printf("please enter pwd_reg:");
	fgets(pwd_reg,sizeof(pwd_reg),stdin);

	//将两个字符串中的换行改成'\0'
	userName_reg[strlen(userName_reg)-1]='\0';
	pwd_reg[strlen(pwd_reg)-1]='\0';

	//打开文件
	FILE *rfp = NULL;
	if((rfp=fopen("./uer.txt","a+"))==NULL)
	{
		perror("fopen error");
		return -1;
	}
	//2、将注册账号密码写入文件中 中间隔开,每组换行隔开
	fprintf(wfp,"%s %s\n",userName_reg,pwd_reg);
	//3、关闭文件
	fclose(wfp);
	printf("注册成功\n");
	return 0;
}
//自定义登录
int do_login()
{
	//定义容器存放登录账号和登录密码
	char userName_log[20];
	char pwd_log[20];

	//定义变量存储文件读取的账号和密码
	char userName[20];
	char pwd[20];

	//提示并输入登录账号和密码
	printf("please enter 登录账号:");
	fgets(userName_log,sizeof(userName_log),stdin);

	printf("please enter 登录密码:");
	fgets(pwd_log,sizeof(pwd_log),stdin);

	//将两个字符串中的换行改成'\0'
	userName_log[strlen(userName_log)-1]='\0';
	pwd_log[strlen(pwd_log)-1]='\0';

	//打开文件,进行账号和密码对比
	FILE *rfp = NULL;
	if((rfp = fopen("./usr.txt","r")) == NULL)
	{
		perror("fopen error");
		return -1;
	}
	//循环遍历所有文件中的账户
	while(1)
	{
		int res = fscanf(rfp,"%s %s",userName,pwd);    //读取文件中的所有用户
		if(res<0)
		{
			printf("登录失败\n");
			//关闭文件
			fclose(rfp);
			return 1;         //表示登录失败

		}
		//判断登录账号和密码是否匹配
		if(strcmp(userName_log,userName)==0 && strcmp(pwd_log,pwd)==0)
		{
			printf("登录成功\n");
			//关闭文件
			fclose(rfp);
			return 0;
		}
	}

}

int main(int argc, const char *argv[])
{

	char menu;  //功能选项
	while(1)    //重复使用菜单框
	{
		printf("\t\t====1、注册====\n");
		printf("\t\t====2、登录====\n");
		printf("\t\t====3、退出====\n");

		printf("请输入功能选项:");
		scanf("%c",&menu); //读取1

		while(getchar() !='\n');   //吸收垃圾字符,垃圾字符空格及回车,清空缓存区

		//菜单选项多分支选择
		switch(menu)
		{
		case '1':
			{
				do_register();   //执行注册
			}
			break;
		case '2':
			{
				do_login();    //执行登录
			}
			break;
		case '0':
			exit(EXIT_SUCCESS);   //退出程序
		default:printf("enter error\n");
		}

		printf("请输入任意建按回车清屏\n");
		while(getchar()!='\n'); //看见现象
		system("clear");       //调用终端指令清屏
		return 0;
	}
}

 

 

 图像操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值