1 实现登录功能
自定义一个usr.txt,先手动输入其账户密码。
格式:账户 密码
例:
zhangsan 12345
lisi abcde
wangwu abc123
需求如下:
1. 从终端获取账户密码,与文件中的账户密码比较;
2. 若终端输入的账户不存在,则输出账户不存在;
3. 若终端输入的账户存在,但是密码不正确,则输出密码错误;
4. 若账户密码均正确,则输出登录成功。
方法一
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, const char *argv[])
{char get_usrname[20]="";char get_usrpass[20]="";printf("请输入账号:");scanf("%s",get_usrname);printf("请输入密码:");scanf("%s",get_usrpass);FILE* fp=fopen("./usr.txt","r");if(NULL == fopen){perror("fopen");return -1;}char file_name[20];char file_pass[20];int flag=0;while(1){if(fscanf(fp,"%s %s",file_name,file_pass)==EOF)//从终端读取账号密码{flag=1;break;}if(strcmp(file_name,get_usrname)==0 && strcmp(file_pass,get_usrpass)!=0){printf("密码错误!\n");break;}if(strcmp(file_name,get_usrname)==0 && strcmp(file_pass,get_usrpass)==0){printf("登录成功!\n");break;}}if(flag==1){printf("该用户不存在!\n");}fclose(fp);
return 0;
}
方法二
#include <stdio.h>
#include <unistd.h>
#include <string.h>int main(int argc, const char *argv[])
{char get_name[20] = "", get_passwd[20] = "";char file_name[20] = "", file_passwd[20] = "";//从终端获取账户密码printf("请输入账户和密码>>> ");scanf("%s %s", get_name, get_passwd);//以读的方式打开文件FILE* fp = fopen("./usr.txt", "r");if(NULL == fp){perror("fopen");return -1;}//循环读取文件的一行:账户 密码while(1){//将字符串清空bzero(file_name, sizeof(file_name));bzero(file_passwd, sizeof(file_passwd));if(fscanf(fp, "%s %s", file_name, file_passwd) == EOF){printf("%s 用户不存在\n", get_name);break;}// printf("%s %s\n", file_name, file_passwd);//与终端获取到的账户密码比较if(strcmp(file_name, get_name) != 0) //若账户名不相同,则去获取下一个账户密码continue;if(strcmp(file_passwd, get_passwd) != 0){printf("%s 密码错误\n", get_name);}else{printf("%s 用户登录成功\n", get_name);}break; //若账户相同,则不需要继续往后比较其他用户了}//关闭文件fclose(fp);return 0;
}
2 实现注册功能
注册的账户密码存储在上一题的文件中。
需求:不能重复注册。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
int log_on();
int regist();
int main(int argc, const char *argv[])
{/*一、实现登录功能。自定义一个usr.txt,手动输入账户密码,格式如下:账户 密码例如: zhangsan 12345lisi abcdewangwu abc123需求如下:1.从终端获取账户密码,与文件中的账户密码比较2.若终端输入的账户不存在,则输出账户不存在3.若终端输入的账户存在,但是密码不正确,则输出密码错误4.若账户密码均正确,则输出登录成功二、附加题实现注册功能,注册的账户密码存储在上一题的文件中。需求:不能重复注册。*/int choose;printf("请选择是注册用户(1)还是登录用户(2):");scanf("%d",&choose);if(choose!=1&&choose!=2){printf("选择失败!\n");return 0;}//注册else if(choose==1){regist();}//登录else{log_on();}return 0;
}
int log_on()
{char get_usrname[20]="";char get_usrpass[20]="";printf("请输入账号:");scanf("%s",get_usrname);printf("请输入密码:");scanf("%s",get_usrpass);FILE* fp=fopen("./usr.txt","r");if(NULL == fopen){perror("fopen");return -1;}char file_name[20];char file_pass[20];int flag=0;while(1){if(fscanf(fp,"%s %s",file_name,file_pass)==EOF)//从终端读取账号密码{flag=1;break;}if(strcmp(file_name,get_usrname)==0 && strcmp(file_pass,get_usrpass)!=0){printf("密码错误!\n");int b=0;printf("请问是否要再次登录(0/1):");scanf("%d",&b);if(b==1){log_on();}break;}if(strcmp(file_name,get_usrname)==0 && strcmp(file_pass,get_usrpass)==0){printf("登录成功!\n");break;}}if(flag==1){printf("该用户不存在!\n");int b=0;printf("请选择是否要注册(0/1):");scanf("%d",&b);if(b==1){regist();}}fclose(fp);return 0;
}int regist()
{char get_usrname[20];char get_usrpass[20];printf("请输入注册账户:");scanf("%s",get_usrname);printf("请输入注册密码:");scanf("%s",get_usrpass);FILE* fp=fopen("./usr.txt","r");char file_name[20];char file_pass[20];int flag=0;while(1){if(fscanf(fp,"%s %s",file_name,file_pass)==EOF){flag=1;break;}if(strcmp(get_usrname,file_name)==0){printf("用户已存在!\n");int b=0;printf("请问是否直接选择登录(0/1):");scanf("%d",&b);if(b==1){log_on();}break;}}if(flag==1){fclose(fp);fp=fopen("./usr.txt","a+");fprintf(fp,"%s %s",get_usrname,get_usrpass);fputc(10,fp);printf("注册成功!\n");}fclose(fp);}