Ir ao conteúdo
  • Cadastre-se

C Programa de login e senha não funciona corretamente


jbiribi

Posts recomendados

Estou iniciando esse semestre a aprender programação em C e estou perdido no seguinte exercício:

 

Escreva um programa que peça ao usuário o seu nome e senha dele e oferece três oportunidades para inserir os dados corretos, que serão "admin" e "1234". Se os dados inseridos estiverem corretos, será exibida "Bem-vindo ao sistema". Caso contrário, uma mensagem será exibida na tela indicando que o número de tentativas permitidas foi excedido e que por motivos de segurança a conta foi bloqueada.

 

Até agora fiz o seguinte:
 

#include <stdio.h>

int main() {
    
    char login;
    int senha, tentativas = 0;
    
    do{
        printf("Insira o login: ");
        scanf("%s", &login);
        
        printf("Insira a senha numérica: ");
        scanf("%i", &senha);
        
        tentativas = tentativas + 1;
        
    } while(tentativas < 3);
    
    return 0;
}

 

O problema é que com uma tentativa já está encerrando, e não sei o porque disso. Também não sei como colocar as outras formas de encerrar o loop. Tentei colocando || e && mas não funcionou.

Alguém consegue me ajudar??

 

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

11 minutos atrás, TYSQUARE89 disse:

O problema é simples, você colocou char para string, e então as outras perguntas são puladas.

 

Errado:


char login;
scanf("%s", &login);

Certo:


char login[100];
scanf("%s", &login);

 

 

É mesmo. Tenho que dizer o número de caracteres da string. Valeu!!

 

E para colocar as outras formas de encerrar o loop no while, como faço?

adicionado 0 minutos depois
3 minutos atrás, João Friatzsa disse:

@jbiribi Talvez seja a referência do tipo da variável que você tá dando pra inserir o valor da senha, que deveria ser:

 


       printf("Insira a senha numérica: ");
       scanf("%d", &senha);

 

 

Acredito que como são várias letras tenha que ser string e fazer o que o TYSQUARE89 falou, não?

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

4 minutos atrás, jbiribi disse:

 

É mesmo. Tenho que dizer o número de caracteres da string. Valeu!!

 

E para colocar as outras formas de encerrar o loop no while, como faço?

 

Na verdade creio que o while é a melhor forma.

 

Você pode fazer só 

while (condição){

}

mas não vai mudar muita coisa, questão de gosto.

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

2 minutos atrás, jbiribi disse:

 

Sim, o que eu quis dizer é que tenho que encerrar por 3 tentativas ou se a senha estiver correta, mas não sei como colocar essas 3 situações no while.

 

Esse programa está bem distorcido, pra começar você nem deu um valor padrão para a senha e assim não tem como ser uma "senha". Mas vamos ignorar isso, suponhamos que haja um valor padrão de 12345, e já que sua condição para encerrar é tentativas <=3, então: 

		if (senha == 12345) {
			tentativas = 3
		}
		else {
			tentativas = tentativas + 1;
		}

 

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

39 minutos atrás, Helmut Iarley disse:

 

Esse programa está bem distorcido, pra começar você nem deu um valor padrão para a senha e assim não tem como ser uma "senha". Mas vamos ignorar isso, suponhamos que haja um valor padrão de 12345, e já que sua condição para encerrar é tentativas <=3, então: 


		if (senha == 12345) {
			tentativas = 3
		}
		else {
			tentativas = tentativas + 1;
		}

 

 

Entendi. Eu achei que dava pra fazer algo como while (tentativas < 3 || (senha = 1234 && login = admin))

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

17 horas atrás, Helmut Iarley disse:

 

Esse programa está bem distorcido, pra começar você nem deu um valor padrão para a senha e assim não tem como ser uma "senha". Mas vamos ignorar isso, suponhamos que haja um valor padrão de 12345, e já que sua condição para encerrar é tentativas <=3, então: 


		if (senha == 12345) {
			tentativas = 3
		}
		else {
			tentativas = tentativas + 1;
		}

 

 

Mas como eu faço para colocar o login e  senha nesse if? 

Link para o comentário
Compartilhar em outros sites

@jbiribi
 

#include <stdio.h>
#include <string.h>
int main() {
    char login[100] = "12345";
    char login1[100];
    char senha[100] = "123";
    char senha1[100];
    //char login[100];
    int tentativas = 0;
    
    do{
        printf("Insira o login: ");
        scanf("%s", &login1);
        
        printf("Insira a senha numérica: ");
        scanf("%s", &senha1);
        
        tentativas = tentativas + 1;
        
    } 
	while(tentativas < 3);
	if(strcmp(login1,login) == 0 && strcmp(senha,senha1) == 0){
	printf("LOGADO");
	}
	else
	{
		printf("REJEITADO");
	}
    
    return 0;
}

 Nem é preciso

Link para o comentário
Compartilhar em outros sites

13 horas atrás, Xaws disse:

@jbiribi
 


#include <stdio.h>
#include <string.h>
int main() {
    char login[100] = "12345";
    char login1[100];
    char senha[100] = "123";
    char senha1[100];
    //char login[100];
    int tentativas = 0;
    
    do{
        printf("Insira o login: ");
        scanf("%s", &login1);
        
        printf("Insira a senha numérica: ");
        scanf("%s", &senha1);
        
        tentativas = tentativas + 1;
        
    } 
	while(tentativas < 3);
	if(strcmp(login1,login) == 0 && strcmp(senha,senha1) == 0){
	printf("LOGADO");
	}
	else
	{
		printf("REJEITADO");
	}
    
    return 0;
}

 Nem é preciso

 

Esse seu não funciona porque mesmo colocando login e senha certo tem que entrar 3 vezes para "logar"

Mais cedo fiz um que deu certo. É assim:

 

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


int main() {
    
    char login1[100] = "admin", login2[100];
    int senha, tentativas = 0;
    
    do{
        printf("Insira o login: ");
        scanf("%s", &login2);
        
        printf("Insira a senha numérica: ");
        scanf("%i", &senha);
        
        if ((senha == 1234) && (strcmp (login1,login2) == 0 )){
            tentativas = 3;
        }
        
        tentativas = tentativas + 1;
        
    } while(tentativas < 3);
    
    if ((senha == 1234) && (strcmp (login1,login2) == 0 )){
        printf("\nBem-vindo ao sistema");
    }
    else {
        printf("\nMáximo de tentativas alcan%cado", 135);
    }

    return 0;
}


 

Link para o comentário
Compartilhar em outros sites

Tenta assim:

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

int main() {

    char login[100];
    int senha, tentativas = 0;

    do{
        printf("Insira o login: ");
        scanf("%s", &login);

        printf("Insira a senha numérica: ");
        scanf("%i", &senha);


        if ((senha == 1234) && (strcmp (login,"admin") == 0 )){
            printf("\nBem-vindo ao sistema");
            break;
        }

        tentativas = tentativas + 1;

    } while(tentativas < 3);
  
    if(tentativas == 3){
        printf("FALHA AO LOGAR!!\n");
    }
    return 0;
}

 

Link para o comentário
Compartilhar em outros sites

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