Ir ao conteúdo
  • Cadastre-se

Impressão do código catpcha.


Posts recomendados

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

 

Link para o comentário
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;
}

 

Link para o comentário
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.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

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