Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
jbiribi

C Programa de login e senha não funciona corretamente

Recommended Posts

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

 

Editado por Simon Viegas
Antes de postar um código, favor pressionar o botão <>
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

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);

 

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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);

 

Editado por João Friatzsa
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • 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

    Compartilhar este post


    Link para o post
    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.

    Editado por Helmut Iarley
    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 1 minuto atrás, Helmut Iarley disse:

     

    Na verdade creio que o while é a melhor forma.

     

    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.

    • Curtir 1

    Compartilhar este post


    Link para o post
    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

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 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

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 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? 

    Compartilhar este post


    Link para o post
    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

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 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;
    }


     

    Editado por Simon Viegas
    Por favor, antes de postar um código, pressionar o botão <>

    Compartilhar este post


    Link para o post
    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;
    }

     

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário






    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

    ×