C语言实现登录与注册功能(结构体、文件操作)

这篇博客目的是记录注册与登记(C语言)的代码,若有何不对欢迎指出(。・∀・)ノ゙

emm源文件和可执行程序要和"users.txt"(自己提前创建)在同一路径下
一开始为了方便把源文件放在桌面 这样和"users.txt"不同路径

feof函数不会用 中途卡在这里放弃了几天

typedef struct User_basicinfo
{
	char id[15];
	char paw[20];
	char name[15];
	char sex[5];
}Users;
void Login();
void Regist();

#include <stdio.h>
int main()
{
	int input=-1; 
    do
	{
		printf("\t\t\t----------------------------------\n");
		printf("\t\t\t|           1.登录               |\n");
		printf("\t\t\t|           2.注册               |\n");
		printf("\t\t\t|           0.退出               |\n");
		printf("\t\t\t----------------------------------\n");
		printf("请选择功能->");
		scanf("%d",&input);
		switch(input)
		{
			case 1:Login();break;
			case 2:Regist();break;
			case 0:puts("退出成功"); return 0;
		}
	}while(input);
	
	return 0;
}
void Regist()
{
	Users a={0},b={0};
	char tmp[20]={-1};
	FILE *pf=NULL;
	pf=fopen("users.txt","r");//用pf去指向文件 
	if(pf==NULL)
	{
		printf("注册时打开文件失败\n");
		return ;
	}
	printf("\t\t\t欢迎来到注册界面\n\n");
	printf("\t\t\t输入账号->");
	scanf("%s",a.id);
	printf("输入成功!\n"); 

	fread(&b, sizeof(Users), 1, pf);
//【判断】有没有注册过-比较字符串是否相等 
//不相等->是否到文件尾 
while(1)
{
	if(strcmp(a.id, b.id)!=0 )
	{
		 if(feof(pf)==0 )//未到文件尾 
		 fread(&b, sizeof(Users), 1, pf);
	 	 else//到了文件尾仍然没有相同的字符串-说明输入的账号使新的 可以去注册界面 
		 {
		 printf("账号未注册过,将跳转到注册界面\n");
		 system("pause");
		 break;//利用break来跳出无限循环 
		 }
	}
	else
	{
		 printf("该账号已注册过\n");
		 fclose(pf); pf=NULL;
		 return;
    }
}
//【注册界面】 
	printf("\t\t\t请输入姓名->"); 
	scanf("%s",a.name);
	printf("\t\t\t请输入性别:男/女->"); 
	do{
		getchar();
		scanf("%s",a.sex);
		if(strcmp(a.sex, "男")!=0&&strcmp(a.sex, "女")!=0)
		printf("\t\t\t输入错误,请重新输入->");
		else break;
	     }while(1);
			
		printf("\t\t\t请输入密码->"); 
		scanf("%s",a.paw);
		printf("\t\t\t请再输入一次密码->"); 
		do{
		scanf("%s",tmp);
		if(strcmp(tmp,a.paw)!=0)
		printf("\t\t\t两次输入密码不一致,请再输入一次密码->");
		else break;
		}while(1);
		//两次密码一致
		fclose(pf);	pf=NULL;
		pf=fopen("users.txt","a");
		//fwrite会在当前文件指针的位置写入数据
		//"w" 打开,文件指针指到头,只写;"a" 打开,指向文件尾
		fwrite(&a, sizeof(Users) , 1, pf );
		printf("\t\t\t注册成功!\n"); 
		fclose(pf);	pf=NULL;
		return;	
}


void Login()
{
	Users a={0},b={0};
	FILE *pf=fopen("users.txt","r");
	if(pf==NULL)
	{
		printf("文件打开失败\n");
		return ;
	}
	printf("欢迎来到登录界面!\n");
	printf("请输入账号->");
	scanf("%s",a.id);
	fread(&b, sizeof(Users), 1, pf);
	while(1)
	{
		if(strcmp(a.id, b.id)!=0 )
		{
			if(feof(pf)==0)//未到文件尾 
			{
				fread(&b, sizeof(Users), 1, pf);
			}
			else
			{
				printf("该账号不存在,请先注册\n");
				fclose(pf); pf=NULL;
				return ;
			}
		}
		else//账号注册过->跳到输入密码 
		{
			break; //退出无限循环,跳到输入密码 
		}
		
	}
//【输入密码】 
	printf("请输入密码->"); 
	do{
	scanf("%s",a.paw);
	if(strcmp(a.paw, b.paw)!=0 )
	printf("密码错误,请重新输入->");
	else break;
	}while(1);
	printf("登录成功!\n");
	fclose(pf); pf=NULL;
}



没有这位大佬的代码我是敲不出来的…感谢!
->戳我<-

  • 36
    点赞
  • 274
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
C语言可以通过使用数据结构和文件操作实现注册登录功能。下面是一个简单的示例: 1. 首先,我们可以定义一个结构体来表示用户数据,包括用户名和密码: ```c typedef struct { char username[20]; char password[20]; } User; ``` 2. 接下来,我们可以定义几个函数来实现注册登录功能。首先是注册函数: ```c #include <stdio.h> // 注册函数 void registerUser() { User user; printf("请输入用户名:"); scanf("%s", user.username); printf("请输入密码:"); scanf("%s", user.password); // 将用户数据保存到文件 FILE* file = fopen("users.txt", "a"); fwrite(&user, sizeof(User), 1, file); fclose(file); printf("注册成功!\n"); } ``` 3. 然后是登录函数: ```c #include <stdio.h> #include <string.h> // 登录函数 void loginUser() { User user; printf("请输入用户名:"); scanf("%s", user.username); printf("请输入密码:"); scanf("%s", user.password); // 从文件中读取用户数据 FILE* file = fopen("users.txt", "r"); if (file == NULL) { printf("用户文件不存在!\n"); return; } int found = 0; while(fread(&user, sizeof(User), 1, file)) { if (strcmp(user.username, username) == 0 && strcmp(user.password, password) == 0) { printf("登录成功!\n"); found = 1; break; } } if (!found) { printf("用户名或密码错误!\n"); } fclose(file); } ``` 4. 最后,我们可以编写一个主函数来调用注册登录函数: ```c #include <stdio.h> int main() { int choice; printf("1. 注册\n"); printf("2. 登录\n"); printf("请选择功能:"); scanf("%d", &choice); switch (choice) { case 1: registerUser(); break; case 2: loginUser(); break; default: printf("无效的选择!\n"); } return 0; } ``` 以上是一个使用C语言实现简单注册登录功能的示例。请注意,此示例仅作演示用途,实际应用中可能需要更复杂的逻辑和安全性考虑。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值