Ir ao conteúdo
  • Cadastre-se

C Linguagem C - Codigo de iniciante com erro.


Thais Oliveira

Posts recomendados

#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
Link para o comentário
Compartilhar em outros sites

@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
Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

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