BrunoMac Posted December 20, 2021 at 10:23 AM Report Share #624985 Posted December 20, 2021 at 10:23 AM 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 More sharing options...
Solution thoga31 Posted December 22, 2021 at 09:32 AM Solution Report Share #625009 Posted December 22, 2021 at 09:32 AM Dentro do ciclo for da função insiraCodigo() tens um i++ a mais. Estás essencialmente a aumentar o iterador por duas vezes. 1 Report Knowledge is free! Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now