Ir ao conteúdo

Posts recomendados

Postado
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int validacao(int tentativaSenha[4]);
void verificaSenha(int tentativaSenha[4], int mostra[5], int senha[4]);

int main(){

      //declaração de variáveis
      int senha[4], tentativaSenha[4], i, j, numero, mostra[4];

      srand(time(NULL));

      //gerando senha aleatoria sem repetição
      for (i=0;i<4;i++){
            numero=rand()%10;
            if (senha[0]!=numero && senha[1]!=numero && senha[2]!=numero && senha[3]!=numero){
                  senha[i]=numero;
                  printf("(%d)\t", senha[i]);
            }else{
            i--;
            }
      }

      //iniciando as tentativas da senha
      for(i=1; i<=10; i++){
            printf("\nEntre com sua %d chance: ", i);
            scanf("%d %d %d %d", &tentativaSenha[0], &tentativaSenha[1], &tentativaSenha[2], &tentativaSenha[3]);
            if(validacao(tentativaSenha)==0){
                  printf("Digite apenas numeros de 0 a 9, vamos tentar novamente: ");
                  i--;
            }else{
                  numero=0;
                  verificaSenha(tentativaSenha,mostra,senha);
                  for(j=0;j<4;j++){
                        printf("[%d] ", mostra[j]);
                        if(mostra[0]==1){
                           numero=numero+1;
                        }
                  }if(numero==4){
                        printf("\n Senha correta! ");
                        i=101;
                  }
            }
      }if(i==102){
            printf("\n Não Foi desta vez :(");
      }
    return 0;
}

//função para validar os digitos da senha
int validacao(int tentativaSenha[4]){

      int i;
      for(i=0; i<4; i++){
            if(tentativaSenha[i]>=0 && tentativaSenha[i]<=9){
                  return 1;
            }else{
                  i=5;
                  return 0;
            }
      }
}

//função para verificar senha (-1,0,1)
void verificaSenha(int tentativaSenha[4], int mostra[4], int senha[4]){

      int i, j;
      for(i=0;i<4;i++){
            mostra=-1;
            for(j=0;j<4;j++){
                  if(tentativaSenha[i]==senha[j] && i==j){
                        mostra[i]=1;
                  }else{
                        if(tentativaSenha[i]==senha[j]){
                              mostra[i]=0;
                        }
                  }
            }
      }
}

Preciso fazer um programa que gere uma senha de 4 digitos aleatorios de 0 a 9 sem repetição, isto eu fiz no meu primeiro for na função main, no segundo for onde comentei(iniciando as tentativas da senha) é onde possivelmente está o erro, no if onde chamo a função validação, se eu digitar na execução do programa numero maiores que 9 ou menos que 0(negativos), recebo a mensagem para digitar apenas numeros de 0 a 9, então se eu digitar os numero de 0 a 9, o programa fecha. Não consigo entender o por que... Não sei se estou declarando ou chamando funções de forma errada.

  • Curtir 1
Postado

@Thais Oliveira   seu código está dando erro por que você esqueceu de colocar a posição do vetor mostra[ i ] no inicio da

função verificaSenha e um erro lógico dentro da função main depois do for que pega os numeros dez vezes, estava  

if(i==102)

ser mas deveria

if(i==11)

então seu código com algumas modificações ficaria assim :

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int validacao(int tentativaSenha[4]);
void verificaSenha(int tentativaSenha[4], int mostra[5], int senha[4]);
int main(){
      /*//declaração de variáveis*/
      int senha[4], tentativaSenha[4], i, j, numero, mostra[5];

      srand(time(NULL));

      /*//gerando senha aleatoria sem repetição*/
      for (i=0;i<4;i++){
            numero=rand()%10;
            if (senha[0]!=numero && senha[1]!=numero && senha[2]!=numero && senha[3]!=numero){
                  senha[i]=numero;
                  printf("(%d)\t", senha[i]);
            }else{
            i--;
            }
      }

      /*//iniciando as tentativas da senha*/
      for(i=1; i<=10; i++){
            printf("\nEntre com sua %d chance: ", i);
            scanf("%d %d %d %d", &tentativaSenha[0], &tentativaSenha[1], &tentativaSenha[2], &tentativaSenha[3]);
            if(validacao(tentativaSenha)==0){
                  printf("Digite apenas numeros de 0 a 9, vamos tentar novamente: ");
                  i--;
            }else{
                  numero=0;
                  verificaSenha(tentativaSenha,mostra,senha);
                  for(j=0;j<4;j++){
                        printf("[%d] ", mostra[j]);
                        if(mostra[0]==1){
                           numero=numero+1;
                        }
                  }
                  if(numero==4){
                        printf("\n Senha correta! \n\n");
                        i=101;
                  }
            }
      }
      if(i==11){
            printf("\n Não Foi desta vez :(\n\n");
      }
    return 0;
}

/*//função para validar os digitos da senha*/
int validacao(int tentativaSenha[4]){

      int i;
      for(i=0; i<4; i++){
            if(tentativaSenha[i]>=0 && tentativaSenha[i]<=9){
                  return 1;
            }else{
                  i=5;
                  return 0;
            }
      }
}

/*//função para verificar senha (-1,0,1)*/
void verificaSenha(int tentativaSenha[4], int mostra[5], int senha[4]){
      int i, j;
      for(i=0;i<4;i++){
            mostra[i]=-1;
            for(j=0;j<4;j++){
                  if(tentativaSenha[i]==senha[j] && i==j){
                        mostra[i]=1;
                  }else{
                        if(tentativaSenha[i]==senha[j]){
                              mostra[i]=0;
                        }
                  }
            }
      }
}

 

  • Curtir 1
  • Amei 1
Postado

Boa noite. Acredito que possa estar acontecendo do teu programa fechar pelo seguinte: Na função main o else está chamando a função verificaSenha, e dentro desta função logo abaixo do for, você declarou que:

 

mostra=-1;

Só que "mostra" se trata de um vetor. Você está atribuindo um valor a este vetor sem mencionar um índice dele. Provavel que o correto seria o seguinte:

 mostra[i]=-1;

Faça o teste e avise se deu certo. Espero ter ajudado ;)

  • Curtir 2
  • Amei 1
Postado

Thais Oliveira aqui gente, obrigada!

 

Além do erro que vocês já evidenciaram, ainda tem outro, apos a função verifica senha, no vetor "mostra[0]==1", deveria ser "mostra[j]==1", se você deixar o "mostra[0]", seu programa vai dar senha correta com acerto de apenas 1 numero da senha... Agora se você alterar para mostra[J], o programa so vai dar como senha correta, se acertar os 4 digitos.

 

Moderadores, podem encerrar o topico, não estou conseguindo entrar em minha conta, tem q validar o e-mail, mas entro é pelo face, e quando digito a senha para validar (a senha do face) não está validando, dando senha errada...

 

 verificaSenha(tentativaSenha,mostra,senha);
                  for(j=0;j<4;j++){
                        printf("[%d] ", mostra[j]);
                        if(mostra[0]==1){
                           numero=numero+1;

 

  • Curtir 2

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

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!