Estou criando um login em C que precisa ser capaz de guardar múltiplos usuários e fazer com que eles possam logar. Em dado momento percebi que o fopen com o "wb" reescreve os usuários anteriores, mantendo só um. Há a possibilidade de abrir ele com a+, mas se eu fizer isso a minha função login não vai ser mais capaz de permitir a ninguém logar. Sendo assim, minha decisão foi: abrir um arquivo para cada usuário, e depois faço com que minha função login olhe arquivo por arquivo vendo se as credenciais de acesso do usuário batem com as de qualquer arquivo. O problema é que não consigo fazer a função fopen abrir diferentes arquivos utilizando a variável i. Tentei de diversas maneiras, mas aparentemente a função simplesmente não comporta mais argumentos do que "arquivo_nome", "wb". Alguém tem uma ideia de como fazer isso? Abaixo, minha função cadastrar.
void cadastrar_user() {
FILE *fp;
struct usuario_t usuario;
int i = 0;
memset(&usuario,0,sizeof(struct usuario_t));
printf("\n ------Cadastro de usuario------");
printf("\n\n Insira um login> ");
scanf("%s", &usuario.login);
printf("\n Insira uma senha> ");
scanf("%s", &usuario.senha);
i++;
fp = fopen("registro", "wb");
fwrite(&usuario, sizeof(struct usuario_t), 1, fp);
fclose(fp);
printf("\n");
printf("\n ---- Usuario cadastrado, redirecionando para login! ----");
login();
Abaixo, minha função 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 não 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();
return 0;
} else {
printf(" \n----Usuario ou senha invalidos!----\n");
printf("\n Tente novamente! Redirecionando para a pagina inicial\n\n");
main();
}
}
return 0;
}