Ir ao conteúdo
  • Cadastre-se

Problema com cadastro e login de clientes em C.


Posts recomendados

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>

#define RISOTO 10.00;
#define LASAGNA 25.00;

void cadastro();
void logar();
void italiano();

struct Cliente
{
    char nome[30];
    int rg;
    int cpf;
    char endereco[50];
    int telefone;
    char login[20];
    char senha[20];
    int contar;
};

struct Cliente cliente[30];

int main()
{
    setlocale(LC_ALL, "Portuguese");

    int opcao, prato, restaurante;

    printf("Digite (1) para fazer login ou (2) para se cadastrar: ");
    scanf("%d", &opcao);

    while(opcao < 1 || opcao > 2)
    {
        printf("\nOpcão inválida, digite novamente:");
        scanf("%d", &opcao);
    }

    if(opcao == 1)
    {
        logar();
    }
    else if(opcao == 2)
    {
        cadastro();
    }


    return 0;
}
void cadastro()
{
    int cont = 0;
    int maisClientes;
    int clientes;

    do
    {
        maisClientes = 0;

        printf("\nDigite seus dados para efetuar o cadastro:\n\n");
        printf("Nome completo: ");
        fflush(stdin);
        fgets(cliente[cont].nome,30,stdin);
        printf("RG: ");
        scanf("%d", &cliente[cont].rg);
        printf("CPF: ");
        scanf("%d", &cliente[cont].cpf);
        printf("Endereço: ");
        fflush(stdin);
        fgets(cliente[cont].endereco,50,stdin);
        printf("Telefone: ");
        scanf("%d", &cliente[cont].telefone);
        printf("Login: ");
        fflush(stdin);
        scanf("%s", &cliente[cont].login);
        printf("Senha: ");
        fflush(stdin);
        scanf("%s", &cliente[cont].senha);
        printf("\n");

        fflush(stdin);



        printf("Deseja cadastrar mais clientes? (1)SIM (2)NÃO: ");
        scanf("%d", &clientes);
        printf("\n");

        if(clientes == 1)
        {
            cliente[0].contar++;
            maisClientes++;
            cont++;
            system("cls");
        }
        else
        {
            system("cls");
            printf("Login!!\n\n");
            logar();
        }

    }
    while(maisClientes == 1);
}

void logar()
{
    char login[20], senha[20];
    int contador;

    printf("\nNome de usuario: ");
    fflush(stdin);
    scanf("%s", &login);
    fflush(stdin);
    printf("Senha: ");
    fflush(stdin);
    scanf("%s", &senha);
    system("cls");

    if(strcmp(login,"adm") == 0 && strcmp(senha,"adm") == 0)
    {
        printf("\nBem vindo administrador\n\n");

    }

    for(contador = 0; contador <= cliente[0].contar; contador++)
    {
        if(strcmp(login, cliente[contador].login) == 0 && strcmp(senha, cliente[contador].senha) == 0 )
        {
            printf("Bem vindo cliente");
            printf("%s", cliente[contador].login);
        }

        else if(strcmp(login, cliente[contador].login) != 0 || strcmp(senha, cliente[contador].senha) != 0)
        {
            printf("Usuario invalido");
            logar();
        }
    }
}
void italiano()
{
    printf("\nRISOTO - R$10,00\n");
    printf("LASAGNA - R$25,00\n");
}

Estou fazendo esse trabalho e preciso criar um sistema de cadastro e login de clientes, o sistema deve permitir o cadastro de vários clientes. Utilizei a função strcmp para fazer a validação do login e funciona perfeitamente se eu cadastrar somente um cliente. Mas se eu cadastrar mais de um cliente o programa printa a mensagem de usuario invalido mesma com o login e senha corretos. Alguém sabe me dizer o que estou fazendo de errado?
Acredito que a forma que estou utilizando o for na modulo logar seja ineficiente.

Link para o comentário
Compartilhar em outros sites

Na função "logar()", nesse trecho:

 else if(strcmp(login, cliente[contador].login) != 0 || strcmp(senha, cliente[contador].senha) != 0)
        {
            printf("Usuario invalido");
            logar();
        }

Você está percorrendo um vetor "V[n]" n é um número inteiro. Logo para chegar no "V[2]", primeiro vai passar pelo "V[0]" e "V[1]", o problema está dentro desse IF, pois se na checagem do "V[0]" não conferir USUÀRIO/SENHA, o IF chama a função LOGAR(); impossibilitando a checagem do restante das posições do vetor.

 

Faça um teste, retire a função "logar()" do IF e cadastre 3 clientes, depois entre como o 3º cliente.

 

DICA: Evite chamar funções do menu dentro de outras funções, o ideal é você colocar o MENU em loop e assim que acabar uma função, volta pro menu.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

34 minutos atrás, CiroboyBR disse:

Na função "logar()", nesse trecho:


 else if(strcmp(login, cliente[contador].login) != 0 || strcmp(senha, cliente[contador].senha) != 0)
        {
            printf("Usuario invalido");
            logar();
        }

Você está percorrendo um vetor "V[n]" n é um número inteiro. Logo para chegar no "V[2]", primeiro vai passar pelo "V[0]" e "V[1]", o problema está dentro desse IF, pois se na checagem do "V[0]" não conferir USUÀRIO/SENHA, o IF chama a função LOGAR(); impossibilitando a checagem do restante das posições do vetor.

 

Faça um teste, retire a função "logar()" do IF e cadastre 3 clientes, depois entre como o 3º cliente.

 

DICA: Evite chamar funções do menu dentro de outras funções, o ideal é você colocar o MENU em loop e assim que acabar uma função, volta pro menu.

Obrigado pelo ajuda parceiro, vou tentar arrumar aqui

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!