HYPER Posted May 23, 2021 at 04:41 PM Report Share #622397 Posted May 23, 2021 at 04:41 PM Olá a todos, Estou em Engenharia Informática e preciso de fazer um trabalho (que é o jogo do semáforo) onde tenho que fazer um tabuleiro (char) com alocação de memória. Neste momento estou preso numa função em que tenho que adicionar uma linha ou uma coluna dependendo do que o utilizador quiser fazer. Alguém me consegue ajudar? Obrigado. 1 Report Link to comment Share on other sites More sharing options...
devair fernandes Posted May 23, 2021 at 07:02 PM Report Share #622400 Posted May 23, 2021 at 07:02 PM (edited) @Hyper creio que você queira é inserir dados nas colunas de cada linha da matriz , e se você puder postar seu código que você já tenha feito sobre esse exercício , seria melhor para visualizarmos como está e em que podemos ajudar , mas aqui tens um exemplo dessas matriz de ponteiro com alocação de memória : char **PL; // essa é a matriz de ponteiro // e precisa alocar espaço na memória para ela char Player = 'p'; // uma variável simples int TabNum[3][3]; // uma matriz simples char temp = '0'; // outra variável simples PL = (char**)malloc(3*sizeof(char)); // Aloca uma matriz de 3 linhas scanf("%c", &temp); // pega um valor do teclado while(char c = fgetc(stdin) != '\n'); // limpar o buffer do teclado for(int x=0; x<3; x++) // loop para percorrer as linhas da matriz { PL[x]=(char*)malloc(3*sizeof(char)); // Aloca 3 colunas da matriz for(int z=0; z<3; z++) // loop para percorrer as colunas da matriz { PL[x][z] = Player; // insere dados na matriz printf("%c ",PL[x][z]); // escreve o conteúdo de cada uma das posições da matriz } printf("\n"); // pula para a linha de baixo na tela } // no final antes de sair do programa // precisa liberar os espaços alocados // usando a função free(variavel) PL free(PL); Edited May 23, 2021 at 07:10 PM by devair fernandes Link to comment Share on other sites More sharing options...
HYPER Posted May 23, 2021 at 07:30 PM Author Report Share #622401 Posted May 23, 2021 at 07:30 PM (edited) Aquilo que eu quero fazer é: - Tenho uma matriz dinâmica (envio o código com a estrutura de dados e duas funções - char **inicializa_tab(pItab x); -> inicializa o tabuleiro e - void escreveTabela(pItab x); -> que escreve o tabuleiro: typedef struct infotab{ int coluna,linha,ganhou,n_jogadas,termina,jogador; char **tab; }Itab,*pItab; char **inicializa_tab(pItab x) { int c, l; char **aux = NULL; aux =(char **) malloc(x->linha*sizeof(char *)); //linhas for (c=0; c<x->coluna; c++) aux[c]=(char *) malloc(x->coluna*sizeof(char)); //colunas for (l = 0; l < x->linha; l++) { for (c = 0; c < x->coluna; c++) aux[l][c] = '_'; } return aux; } void escreveTabela(pItab x){ int c, l; printf("\n"); for(l=0; l<x->linha; l++){ for(c=0; c<x->coluna; c++) printf(" %c ", x->tab[l][c]); putchar('\n'); } } - Agora estou a fazer uma função onde o utilizador escolhe se quer aumentar uma linha a matriz ou uma coluna (envio o código que fiz, mas não funciona): char **aumentaTabela(pItab y,char c){ int i,j; char **aux = NULL; aux = y->tab; if(c == 'L') { aux = (char**) realloc(y->tab,sizeof (char*) * (y->linha + 1)); for (i = 0; i < y->coluna; i++) { aux[i] = (char*) realloc(y->tab[i],(y->coluna) * sizeof(char)); } for( j = 0;j<y->coluna;j++) aux[y->linha][j] = '_'; y->linha += 1; } if(c == 'C'){ //aux[0] = realloc(); for (i = 0; i < y->coluna + 1; i++) { aux[i] = (char *) realloc(y->tab[i], (y->coluna + 1) * sizeof(char *)); } for( j = 0;j<y->linha;j++) aux[j][y->coluna] = '_'; y->coluna += 1; } return aux; } Edited May 23, 2021 at 07:31 PM by HYPER 1 Report Link to comment Share on other sites More sharing options...
HYPER Posted May 24, 2021 at 10:37 AM Author Report Share #622405 Posted May 24, 2021 at 10:37 AM @devair fernandes envio o link onde coloquei o meu projeto, pois fiz algumas alterações e estou a começar a pensar que possa ser má comunicação entre funções, mas não estou a conseguir encontrar o erro. https://drive.google.com/drive/folders/1m1-szvIGJy34ktVybk6Th6UMvyRF9B_o?usp=sharing 1 Report Link to comment Share on other sites More sharing options...
pwseo Posted June 13, 2021 at 02:14 PM Report Share #622623 Posted June 13, 2021 at 02:14 PM @HYPER, O link colocado no post anterior vai ter a uma pasta vazia na Google Drive. Mas mesmo que tivesse conteúdo, a forma correcta de utilizar este fórum para obter apoio passa por formular uma questão, o que implica explicar o funcionamento pretendido e o que está na realidade a acontecer (ou, à falta de melhor, o erro emitido pelo compilador). A isto devem acrescentar-se excertos de código relevantes, não propriamente o código de todo o projecto. Posto isto, o problema foi resolvido? Se não foi, qual o problema neste momento? 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