Gostaria de pedir ajuda em um programa simples em c

mateus05

Membro
este programa esta dando erro de execuçao e nao sei o motivo segue abaixo o codigo comentado.
Código:
#include <stdio.h>#include <stdlib.h>
#include <time.h>
#define n 10
void geracor(char senha[4]);//funçao que gera as cores aleatorias.
int verifica(char **matriz,char vetor[4],int *cont);//funçao que recebe as cores inseridas pelo usuario, verifica se esta correto e imprime o resultado.
int main()
{
	int opcao=0,i,cont=0,resul;
	char **matriz, senha[4];
	matriz=(char**) calloc(10,sizeof(char*));
	for(i=1;i<10;i++)
	{
		matriz[i]=(char*) calloc(5,sizeof(char));
	}
	while(opcao!=1)//verifica se o usuario quer começar a jogar.
	{
		printf("jogar digite 1\n encerrar digite0\n ajuda digite 3\n");
		scanf("%d", &opcao);
		if(opcao==3)
			printf("Senha é	um	 famoso	jogo	de	 tabuleiro,	inventado	em	'1971',	em	que	o objetivo é descobrir	a	combinação	secreta	dos	pinos	coloridos.'1.' No	 início	 'do'	 jogo,	há	combinação	 secreta	 de	 '4'	 pinos	 selecionados	 de	 um conjunto	de	'6'	pinos	de	cores	diferentes,	exceto	preto	e	branco;			'2.' Uma	 jogada	 consiste	 em	 tentar	 adivinhar	 a	 combinação	 secreta,selecionando	'4'	pinos	de	cores	diferentes	e	inserindo-os	em	uma	das	linhasde	buracos	'do'	tabuleiro;'3.' A	cada	jogada,	são	dadas	dicas	sobre	a	composição	da	combinação	secreta;'4.' Se,	 dentro	 'do'	 limite	 de	 '10'	 tentativas	 o	 jogador	 acertar	 a	 combinação,	 ojogo	acaba	com	um	vencedor;'5.' Caso	contrário,	o	jogo	termina	com	um	perdedor	e	a	combinação	secreta	érevelada.\n");
		else if(opcao==0)
			return 0;
	}	
	geracor(senha);
	for(i=0;i<4;i++)
		printf("%c\n", senha[i]);
    printf("Para a cor verde digite: v';'\n Para a cor roxa digite: r; \n");
    for(i=0; i<n; i++)
    {
		printf("insira a senha separada por espaços.\n");
        scanf("%c %c %c %c", &matriz[cont][0], &matriz[cont][1], &matriz[cont][2], &matriz[cont][3]);
		scanf("%*c");
        resul=verifica(matriz,senha,&cont);
        cont++;
        if(resul==1)
		{
            printf("voce venceu.\n");
            return 0;
        }
	}	
	printf("voce perdeu.\n");//quando o usuario faz 10 tentativas o jogo e encerrado anunciando a derrota do usuario.
	for(i=0;i<10;i++)
	{
		if(matriz[i]!=NULL)
			free(matriz[i]);
	}
	if(matriz!=NULL)
		free(matriz);
    return 0;
}
void geracor(char *senha)
{
	srand(time(NULL));
    int aux=-1,i,j,cont;
    senha[0]=(rand()%6);
	for(i=0;i<4;i++)
	{
		cont=0;
		aux=(rand()%6);
		for(j=0;j<i;j++)
		{
			if(senha[j]==aux)
				cont+=1;	
		}	
		if(cont==0)
			senha[i]=aux;
		else
			i--;
	}
    for(i=0; i<4; i++)
    {
        switch(senha[i])
        {
            case 0: senha[i]='a';
                break;
            case 1: senha[i]='l';
                break;
            case 2: senha[i]='r';
                break;
            case 3: senha[i]='v';
                break;
            case 4: senha[i]='m';
                break;
            case 5: senha[i]='c';
                break;
        }
    }
}
int verifica(char **matriz,char vetor[4],int *cont)
{
    int i,j,x=0;
	char vpb[4];
	for (i=0;i<4;i++)
		printf("%c", matriz[*cont][i]);
    for(i=0;i<4;i++)//laço que verifica se o usuario acertou a cor e sua determinada posicao.
    {
        if(matriz[*cont][i]==vetor[i-1])
			vpb[i]='p';
		else 
			vpb[i]=' ';
    }
	for(i=0;i<4;i++)//laço que verifica se o usuario acertou a cor e nao a posiçao.
	{
		for(j=0;j<4;j++)
		{
			if(matriz[*cont][i]==vetor[j]&&vpb[i]==' ')
			{
						vpb[i]='b';
			}
		}
	}
	for(i=0;i<4;i++)
	{
		printf("%c", vpb[i]);
	}
	for(i=0;i<4;i++)
	{
		if(vpb[i]=='p')
			x++;
	}
	if(x==4)
		return 1;
	return 2;
}
 
Back
Topo