touch有一个usr.txt的文件,其中存储着用户的账户和密码,格式如下:
zhangsan aaaa
lisi bbbbb
空格前面是账户,空格后面是密码,一行一个账户、密码
要求如下:
从终端获取一个账户名和密码
判断是否能够登录成功
若账户不存在:则提示账户不存在
若账户存在,密码不匹配:则提示密码错误
账户密码均存在:则显示登录成功。
添加一个注册功能。不能重复注册
执行代码如下:
#include<stdio.h>
#include <string.h>
#define N 20
int main(int argc, const char *argv[])
{
FILE* fp =fopen("usr.txt","r+");
if(NULL == fp)
{
perror("fopen");
return -1;
}
char account[N],password[N];
char file_account[N],file_password[N];
char new_account[N],new_password[N];
//终端获取一个账户和密码
printf("请输入账户和密码:");
scanf("%s %s",account,password);
//将名字和密码与文件中存储的账户密码进行比较
// 将名字和密码与文件中存储的账户密码进行比较
while(1)
{
if(fscanf(fp,"%s %s",file_account,file_password) == EOF)
{
printf("账户不存在,请注册账户:\n");
printf("输入要注册的账户和密码:");
scanf("%s %s",new_account,new_password);
fseek(fp,0,SEEK_END);
fprintf(fp,"%s %s\n",new_account,new_password);
printf("新账户注册成功\n");
if(strcmp(file_account,new_account)==0)
{
printf("注册失败,该用户已存在\n");
continue; // 重新回到注册环节
}
char flag;
printf("是否返回登录? Y or N:");
scanf(" %c",&flag);
if(flag == 'Y' || flag == 'y')
{
continue; // 重新回到登录环节
}
else
{
break;
}
}
// 账户若存在比较密码,account相同直接跳出循环
else if(strcmp(account,file_account)==0)
{
if(strcmp(password,file_password)==0)
{
printf("用户登录成功\n");
}
else
{
printf("用户登录失败\n");
char flag;
printf("是否重新登录? Y or N:");
scanf(" %c",&flag);
if(flag == 'Y' || flag == 'y')
{
continue; // 重新回到登录环节
}
else
{
break; // 直接结束程序
}
}
break;
}
}
if(fclose(fp) < 0)
{
perror("fclose");
return -1;
}
return 0;
}
运行结果: