c-如何让strcmp函数检查存档中的每一行



我正在用C语言做一个程序,用户需要能够注册然后登录。当我这样做的时候,我注意到该程序只能验证第一个注册的用户,而不能验证所有其他用户。现在,我需要使这个strcmp函数能够检查归档的每一行,并查看用户凭据是否与归档的任何一行匹配。老实说,我试过不同的方法,但我就是不知道该怎么做。有人能帮我吗?我的注册人功能:

void cadastrar_user() {
FILE *fp;
struct usuario_t usuario;
int i = 1;
memset(&usuario,0,sizeof(struct usuario_t));
printf("n ----Cadastro de usuario----");
printf("nn Insira um login> ");
scanf("%s", &usuario.login);
printf("n Insira uma senha> ");
scanf("%s", &usuario.senha);
fp = fopen("login", "a+");
fwrite(&usuario, sizeof(struct usuario_t), 1, fp);
fputs("n", fp);
fclose(fp);
printf("n");
printf("n ---- Usuario cadastrado, redirecionando para login! ----");
login();

}

下面,我的登录功能:

int login(){
FILE *fp;
struct usuario_t usuario;
fp = fopen("login","rb");
memset(&usuario, 0, sizeof(struct usuario_t));
fread(&usuario, sizeof(struct usuario_t), 1, fp);
fclose(fp);
if(!strcmp("", usuario.login)){
printf("n ----Cadastro nao encontrado, redirecionando para cadastro!----n");
cadastrar_user();}
else {
char login[LOGIN_MAX];
char senha[SENHA_MAX];
printf("n Login> ");
scanf("%s", &login);
printf(" Senha> ");
scanf("%s", &senha);
if (!strcmp(login, usuario.login) && !strcmp(senha, usuario.senha)) {
printf("n Bem vindo %s!n", usuario.login);
menu_crud();
}
else {
printf(" n----Usuario ou senha invalidos!----n");
printf("n  Tente novamente! Redirecionando para a pagina inicialnn");
main();
}
}
return 0;

}

您需要一个循环来读取文件中的所有记录,并与用户输入进行比较。

类似于:

  • 获取用户登录名和密码
  • 如果文件不存在或为空,则调用register函数,并返回
  • 否则打开文件
  • 对于文件中的每个记录(循环(
  • 读取并与用户输入进行比较
  • 如果找到,则从带有记录的函数返回
  • 如果循环结束,则没有找到用户,因此调用register函数

最新更新