通过fopen、fscanf函数实现账户登录

 实现过程:

//写一个usr.txt文档,文档中每一行的格式为:姓名 密码  例如:
//hangsan 123456
//lisi abcdef
//任务:
//要求从终端输入账户,密码;
//与文件中的账户密码比较
//如果账户不存在,则输出用户不存在
//如果账户存在,密码错误,则输出密码错误
//如果账户密码均正确,输出登录成功

#include<stdio.h>
#include<string.h>
int main(int argc, const char *argv[])
{	
	//打开一个仅读文件
	FILE *p=fopen("./usr.txt","r");
	if(p==NULL)
	{
		printf("打开失败\n");
		return -1;
	}
	printf("打开usr.txt文件成功\n");

	//定义两个数组存储终端输入的账户密码
	char get_name[20]={},get_password[20]={};

	//定义两个数组存储文件读取的账户密码
	char file_name[20]={},file_password[20]={};

	//定义两个标记符输入的账户密码的存在与否,为0不存在,为1存在
	int flag_name=0,flag_password=0;
	printf("请输入账户>>>");
	scanf("%s",get_name);

	//循环判断文件中是否有该账户存在
	while(1)
	{
		if(fscanf(p,"%s %s",file_name,file_password)==EOF)
		{
			flag_name=0;
			break;
		}
		if(strcmp(file_name,get_name)==0)
		{
			flag_name=1;
			break;
		}
	}

	//判断账户标记符
	if(flag_name==0)
	{
		printf("用户不存在\n");
	}

	else 
	{
		printf("请输入密码>>>");
		scanf("%s",get_password);

        //循环判断密码是否正确
		while(1)
		{
			//判断是否遍历完文件中的数据
			if(fscanf(p,"%s %s",file_name,file_password)==EOF)
			{
				flag_password=0;
				break;
			}

			//判断文件中是否有相同的数据
			if(strcmp(file_password,get_password)==0)
			{
				flag_password=1;
				break;
			}

		}
		//判断密码标记符
		if(flag_password==0)
		{
			printf("密码错误\n");
		}
		else
		{
			printf("登录成功\n");
		}
	}

	//关闭文件
	if(fclose(p)<0)
	{
		perror("fclose");
		return -1;
	}
	printf("关闭文件成功\n");

	return 0;
}

 实现效果: