Ir ao conteúdo
  • Cadastre-se
Eduardo Ribeiro_720097

Impressão do código catpcha.

Recommended Posts

Não estou conseguindo printar o retorno do meu módulo vetorCaptcha no meu modulo captcha digitado, alguém sabe onde estou errando? 

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

int*vetorCaptcha(){

    int cont, vetorDeCaptcha[18], vetorDeNumeroAleatorio[6], vetorCaptchaFinal[6];

    for(cont = 0; cont < 6; cont++){
        vetorDeCaptcha[cont] = 48 + rand()% 10;
    }
    for(cont = 6; cont < 12; cont++){
        vetorDeCaptcha[cont] = 65 + rand()% 26;
    }
    for(cont = 12; cont < 18; cont++){
        vetorDeCaptcha[cont] = 97 + rand()% 26;
    }
    for(cont = 0; cont < 6; cont++){
        vetorDeNumeroAleatorio[cont] = rand() % 18;
    }
    for(cont = 0; cont < 6; cont++){
        vetorCaptchaFinal[cont] = vetorDeCaptcha[vetorDeNumeroAleatorio[cont]];

    }

    return vetorCaptchaFinal;


}

char * captchaDigitado(){

    char captchaTeclado[6];
    int *codigo;
    int cont;

    codigo = vetorCaptcha();

    for(cont = 0; cont < 6; cont++){
        printf("%c", codigo[cont]);
    }

    printf("Por favor, prove que você não é um robô digitando o código exibido:");
    gets(captchaTeclado);

    return captchaTeclado;
}

int validar(){

  do{  int cont;
    int*leitura;
    int*captchaGerado;
    int erro;

    leitura = captchaDigitado();
    captchaGerado = vetorCaptcha();

    for(cont = 0; cont < 6; cont++){
        if(captchaGerado != leitura){
          erro++;  }
    }
    if(erro == 1){
        return 1;
    }else{
        return 0; }
  }while(validar());

}






int main() {

    srand(time(NULL));
    setlocale(LC_ALL,"portuguese");

    captchaDigitado();


    return 0;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <locale.h>

int*vetorCaptcha(){

    int cont, vetorDeCaptcha[18], vetorDeNumeroAleatorio[6];
    int *vetorCaptchaFinal = (int *) malloc(sizeof(int)*18);//Cria um ponteiro e aponta para memoria alocada, caso você usasse [], e saisse da função a
															//variavel seria destruida.
    														//Mas se você retornar um ponteiro para uma memoria alocada, não vai ser destruido ao sair da função.
    														//Se não quiser usar malloc,
															//você pode usar um parametro na chamada da função, altera e retorna ele.
    

    for(cont = 0; cont < 6; cont++){
        vetorDeCaptcha[cont] = 48 + (rand()% 10);
    }
    for(cont = 6; cont < 12; cont++){
        vetorDeCaptcha[cont] = 65 + (rand()% 26);
    }
    for(cont = 12; cont < 18; cont++){
        vetorDeCaptcha[cont] = 97 + (rand()% 26);
    }
    
    for(cont = 0; cont < 6; cont++){
        vetorDeNumeroAleatorio[cont] = rand() % 18;
    }
    for(cont = 0; cont < 6; cont++){
        vetorCaptchaFinal[cont] = vetorDeCaptcha[vetorDeNumeroAleatorio[cont]];
    }
    
	
    return vetorCaptchaFinal;
}

char * captchaDigitado(){

    char captchaTeclado[6];
    int *codigo;
    int cont;

    codigo = vetorCaptcha();

    for(cont = 0; cont < 6; cont++){
        printf("%c", codigo[cont]);
    }

    printf("\nPor favor, prove que você não é um robô digitando o código exibido:");
    gets(captchaTeclado);

    return captchaTeclado;
}

int validar(){

  do{  int cont;
    char*leitura;
    int*captchaGerado;
    int erro;

    leitura = captchaDigitado();
    captchaGerado = vetorCaptcha(); //voce esta gerando dois captchas 1 na função acima,
 								    //outro aqui, tente colocar a função acima aqui...

    for(cont = 0; cont < 6; cont++){
        if(captchaGerado[cont] != leitura[cont]){
          erro++;  }
    }
    if(erro == 1){
        return 1;
    }else{
        return 0; }
  }while(validar());

}






int main() {

    srand(time(NULL));
    setlocale(LC_ALL,"portuguese");

    captchaDigitado();


    return 0;
}

 

Editado por 1freakday

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Eduardo Ribeiro_720097 Utilize ponteiro ao invés de retornar um vetor, fica mais fácil.

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

void vetorCaptcha(char *captcha){
    int cont;

    for(cont = 0; cont < 6; cont++){
        *(captcha+cont) = 65+rand()%26;
    }
}

void captchaDigitado(char *leitura, char *codigo){
    int cont;

    for(cont = 0; cont < 6; cont++){
        printf("%c", *(codigo+cont));
    }

    printf("\nPor favor, prove que você não é um robô digitando o código exibido:\n");
    fflush(stdin);
    gets(leitura);
    fflush(stdin);

}

int validar(){
    int cont, erro;
    char *leitura=(char*)malloc(6*sizeof(char));
    char *codigo=(char*)malloc(6*sizeof(char));

    vetorCaptcha(codigo);
    captchaDigitado(leitura, codigo);

    erro=0;
    for(cont = 0; cont < 6; cont++){
        if(*(leitura+cont)!=*(codigo+cont)){
            erro++;
        }
    }

    if(erro == 0){
        return 0;
    }
    else{
        return 1;
    }
}

int main() {
    srand(time(NULL));
    setlocale(LC_ALL,"portuguese");

    int verifica;

    do{
    verifica=validar();

    if(verifica==0)
        printf("Acertou!\n\n");
    else
        printf("Errou!\n\n");
    }while(verifica!=0);

    return 0;
}

Juro q tentei entender seu gerador de captcha, mas é confuso. então só para explicar eu fiz um que gera apenas letras maiúsculas.

Se não entender alguma parte pode perguntar.

Editado por MassakiMsk

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

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

×