Ir ao conteúdo

Posts recomendados

Postado

Sistema consegue verificar o primeiro usuário cadastrado, os demais constam como usuário ou senha incorreta. Tentei criar um arquivo por usuário, o sistema entra com o usuário certo, mas os errados ele não faz nada. O que posso fazer?

 

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

char opl;
char string1[50],string2[10], nome[100], senha[10];
FILE *ArqUsr;


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

    do{
            printf("\n*---------------------------*");
            printf("\n|         LOGIN             |");
            printf("\n*---------------------------*");
            printf("\n| 1: Fazer login            |");
            printf("\n|                           |");
            printf("\n| 2: Fazer cadastro         |");
            printf("\n|                           |");
            printf("\n| 3: Voltar                 |\n");
            printf("\n|                           |\n");
            printf("\n*---------------------------*\n");
            opl=getch();

        switch(opl)
            {
                case '2'://cadastro
                {

                printf("Digite seu nome: ");gets(string1);//Usuário insere o nome com que quer ser cadastrado
                printf("Digite sua senha: ");gets(string2);//usuário digita sua senha

                ArqUsr=fopen("Usuarios.txt","a");//fazer um arquivo com o nome do usuário

                printf("Usuário cadastrado com sucesso!");
                fprintf(ArqUsr,"\n%s", string1);
                fprintf(ArqUsr,"\n%s", string2);//grava no arquivo a senha do usuário, antecedida pelo caractere
                fprintf(ArqUsr,"\n");
                fclose(ArqUsr);//fecha o arquivo
                getch();
                return main();

                }


                case '1'://login
                {
                    ArqUsr = fopen("Usuarios.txt","r");//abre o arquivo com o nome do usuário

    if (ArqUsr == NULL) {

        printf("\nNenhum usuário cadastrado");
        return main();

    }

    printf("\n\tNOME........: ");
    scanf("%s", nome);
    //Tentei fazer com fgets, mas da erro quando uso no while, então
    //resolvi deixar o scanf mesmo

    printf("\n\tSENHA........: ");
    scanf("%s", senha);

    printf("\n");

// printf("\n%s %s", nome, senha); //testar o que foi digitado pelo usuario

    printf("\n");

    while ((fscanf(ArqUsr, "%s%s", string1, string2)) == 2) {


        if (!strcmp(string1, nome) && !strcmp(string2, senha)) {

            printf("\nBem-Vindo!\n");


        } else {

            printf("\nSeu login ou senha estão errados!");
            return main();

        }

    }
    fclose(ArqUsr);
}
                case '3': opl=0;break;
                default : printf("\a");break;
            }
    }while (opl!=0);

}

 

  • Obrigado 1
Postado

@Marcola1      creio que esse while tenha um erro na leitura do arquivo , que lê apenas dois fscanf e termina , e assim não testa os outros , então seu código poderia ser assim :

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <conio.h>
#include <locale.h>
int flag;
char opl;
char string1[50],string2[10], nome[100], senha[10];
FILE *ArqUsr;
int main(){
    system("color f9");
    setlocale(LC_ALL, "Portuguese");
    do{
        printf("\n*---------------------------*");
        printf("\n|         LOGIN             |");
        printf("\n*---------------------------*");
        printf("\n| 1: Fazer login            |");
        printf("\n|                           |");
        printf("\n| 2: Fazer cadastro         |");
        printf("\n|                           |");
        printf("\n| 3: Sair                   |\n");
        printf("\n|                           |\n");
        printf("\n*---------------------------*\n");
        opl=getch();
        switch(opl){
        case '1':                                      //login
            ArqUsr = fopen("Usuarios.txt","r");        //abre o arquivo com o nome do usuário
            if (ArqUsr == NULL) {
                printf("\nNenhum usuário cadastrado");
                break;
            }
            printf("\n\tNOME........: ");
            scanf("%s", nome);
            printf("\n\tSENHA........: ");
            scanf("%s", senha);
            printf("\n");
            printf("\n");
            flag=0;
            while((fscanf(ArqUsr, "%s%s", string1, string2)) != EOF){
                if(strcmp(string1,nome) == 0 ){
                    flag=1;
                    if(strcmp(string2,senha)==0)flag=2;
                }
            }
            if( flag == 2 ){
                printf("\nBem-Vindo %s  !\n",nome);
            }
            else{
                if( flag == 1){
                    printf("\nSua Senha esta Errada !\n");
                }
                else{
                    printf("\nSeu Login e Sua senha estão errados !\n");
                }
            }
            fclose(ArqUsr);
            break;
        case '2':                                      //cadastro
            printf("Digite seu nome: ");
            fflush(stdin);
            gets(string1); //Usuário insere o nome com que quer ser cadastrado
            printf("%s",string1);
            printf("Digite sua senha: ");
            fflush(stdin);
            gets(string2);//usuário digita sua senha

            ArqUsr=fopen("Usuarios.txt","r");          // abre o arquivo com o nome do usuário para ler o nome
            flag=0;
            while((fscanf(ArqUsr,"%s",nome)) != EOF){
                if(strcmp(string1,nome) == 0 ){
                    printf("\nO Usuario já Existe  !\n");
                    flag=1;
                    break;
                }
            }
            fclose(ArqUsr);
            if(flag==1)break;

            ArqUsr=fopen("Usuarios.txt","a");          //fazer um arquivo com o nome do usuário
            printf("Usuário cadastrado com sucesso!     Tecle");
            fprintf(ArqUsr,"\n%s", string1);
            fprintf(ArqUsr,"\n%s", string2);           //grava no arquivo a senha do usuário, antecedida pelo caractere
            fprintf(ArqUsr,"\n");
            fclose(ArqUsr);                            //fecha o arquivo
            getch();
            break;
        case '3': 
            opl=0;
            break;
        default :
            printf("\a");
        }
    }while (opl!=0);
  return 0;
}

 

Postado

@Marcola1    modifique os return main() , pois isso não é bom ,  use break para parar os switch e for e while ,  e se você quer voltar ao menu de opções então use um loop while ou do / while ,  e também modifiquei a leitura do arquivo .

Postado

@Marcola1    seria igual a essa parte aqui :

flag=0;
while((fscanf(ArqUsr,"%s", string1)) != EOF){
    if(strcmp(string1,nome) == 0 ){
        flag=1;
        break;
    }
}
if( flag == 1 ){
    printf("\nO Usuario já Existe  !\n");
}

ele vai procurar no arquivo , pelo nome digitado , e se encontrar um nome igual , então  ele faz  a variável  flag  igual a hum , sinalizando que encontrou , e aí imprime a mensagem de que o usuário já existe .

Postado

@Marcola1 @Marcola1     eu costumo identar manualmente mesmo , pois assim  coloco do jeito que acho melhor  então coloco as instruções de acordo com o grupo delas , o que está dentro de um loop fica 4 espaços , teclados um a um ,  à direita do início do loop e também dos if's ,  mas no codeblocks tem uma função que faz isso automaticamente , você pode , depois do código digitado , clicar em settings \ souce code formatter(ASstyle) e o código será identado de acordo com as especificações já definidas pelo codeblocks , mas você também pode fazer suas próprias definições , em settings \ Editor e seguir as informações desse site  :

https://pt.stackoverflow.com/questions/260972/indentação-de-código-c

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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...