Jump to content

Passar array criado numa função, para outra como argumento


BrunoMac
Go to solution Solved by thoga31,

Recommended Posts

Bom dia a todos,

Tenho o seguinte código que está a funcionar, mas por algum mistério só me aceita 3 cores, quando o laço supostamente deveria aceitar 5 entradas na função insiraCodigo().

Toda a ajuda é bem vinda e agradecida uma vez que ainda não percebi porquê e deve ser coisa simples.

Obrigado.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h> 
#define QTD  5   // Número de strings a ler
#define MAX 10   // Número de caracteres na string
#define DIM  7   // Número de cores no vetor colors

char *cores[QTD][MAX];  // Vetor cores aleatórias
char *colors[] = {"green", "red", "blue", "yellow", "brown"}; //Cores permitidas
char *aux[QTD][MAX];     // Vetor cores escolhidas pelo jogador

void clear(){
    #if defined(__linux__) || defined(__unix__) || defined(__APPLE__)
        system("clear");
    #endif

    #if defined(_WIN32) || defined(_WIN64)
        system("cls");
    #endif
}

void exibeTabuleiro() {
    int i;
    //Exibir mascara
        for (int i = 0; i < QTD; ++i)
        {   
            printf(" *");
        }
}

/* Função para criar código aleatório de cores*/
void crearCodigoCores(char cores[QTD][MAX])
{
    int i, n, randColor;

    srand(time(NULL));
       
    for(i=0; i<5; i++)  
    {
        randColor = 1 + rand() % 5;     //creates a number 
        switch(randColor)               //converts number created to a string
        {
            case 1: strcpy(cores[i], "red");       break;
            case 2: strcpy(cores[i], "yellow");    break;
            case 3: strcpy(cores[i], "green");     break;
            case 4: strcpy(cores[i], "blue");      break;
            case 5: strcpy(cores[i], "brown");     break;
        }
    } 
    printf("\nO código:\n");
    for (int i = 0; i < QTD; i++)
        printf(" %s", cores[i]);
}


//Função para comparar cores inseridas com o array aleatório
int identical(int i) {

    for (int j = 0 ; j < QTD ; j++) 
    {
        if(*aux[i] == *cores[i])
        {
            return 1;
        }
    }
     return 0; 
}
 
char comum(char *aux[], int len1, char *cores[],int len2) {
 
   int i,j,k,white=0,black=0;
   
   for(i = 0; i < QTD ;i++) 
   {
        if(aux[i] == cores[i])
        {   
            black++;
            continue;
        }

       if(identical(i)==1)
       {
           white++; 
       }
       
    }
    
    printf("\n\nTem %d cores certas no sitio errado",white);
    printf("\nTem %d cores certas no sítio certo",black);
}


/* Função para verificar se a string existe no vetor cores permitidas "colors" */
int verificaCores(char *s) {
    
    // Elimina o '\n' que do fgets 
    if (s[strlen(s) - 1] == '\n') s[strlen(s) - 1] = '\0';
    //Compara input com cores permitidas
    for (int i = 0; i < DIM; i++)
        if (strcasecmp(s, colors[i]) == 0){
            printf("COMPARADO!\n");
            //Se houver retorna 1
            return 1;}
    return 0;
}

void insiraCodigo(){
    
    int i;
    char *input[MAX];
    
    printf("\nInsira o seu código:\n");
    
    /* scanf cores escolhidas e envia para função verificaCores. 
    Se a função retornar 1, guarda no vetor cores */
    for(i = 0; i < 5 ; i++) 
   {
        fgets(input, MAX, stdin);
        if (verificaCores(input)) {
            printf("Gotcha!\n");
            strcpy(aux[i], input);
            i++; 
        }
        else
            printf("Opcao inválida. Tente de novo!\n");                 
    }
    //Mostrar array de cores introduzidas
    printf("O seu código:\n");
    for (int i = 0; i < QTD; i++)
        printf(" %s", aux[i]);
}

int jogo(){
    
    int i;
    char *input[MAX];
    char *mensagem;
    mensagem="Bem vindo ao jogo";
    int tentativas=0,max_tentativas=5,tentativas_restantes=0;
    tentativas_restantes=max_tentativas - tentativas;
    
    clear();
    printf("%s:\n", mensagem);
    printf("Código secreto:\n");
    exibeTabuleiro();
    crearCodigoCores(*cores);
    insiraCodigo(input);
    comum(*aux,QTD,*cores,QTD);
}

int main(void){

    
    jogo();
    
}

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.