Ir ao conteúdo

Posts recomendados

Postado

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
Postado

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

Postado

@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

Postado
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;
}


 

Postado

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

 

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