Ir para o conteúdo
Comic

Returnar um array bidimensional de uma função

Mensagens Recomendadas

Comic

Boa tarde,

Estou a tentar fazer uma função onde crio um array bidimensional do tipo char, e o preencho com caracteres (neste caso apenas com '*' para teste) mas futuramente é para introduzir também letras e números. O meu problema está depois, no fim da função quando tento dar return no array bidimensional.

No main onde chamo a função indicada acima guardo o return do array bidimensional (supostamente já preenchido), e quando o tenho mostrar no ecrã aparece apenas caracteres (esquisitos), alguém me pode ajudar com isto?

Também já li num sitio qualquer que não é possível dar return de um array, é verdade?

Vou colocar o código que tenho:

#include
char desenha_tabuleiro(int tam_linhas, int tam_colunas)
{
char tabuleiro[tam_linhas][tam_colunas];
int j,i;

//PREENCHE TABULEIRO COM *
for (j = 0; j < tam_linhas; j++)
for (i = 0; i < tam_colunas; i++)
tabuleiro[j][i] = '*';

//MOSTRA A TABELA NO ECRA
for (j = 0; j < tam_linhas; j++) {
for (i = 0; i < tam_colunas; ++i)
printf(" %2c |", tabuleiro[j][i]);
printf("\n");
}
return tabuleiro;
}

void main()
{
int n_colunas, n_linhas, j, i;
do{
printf("Introduza o numero de colunas entre 6 e 10: \n");
scanf("%d", &n_colunas);
}while(n_colunas < 6 || n_colunas > 10);

do{
printf("Introduza o numero de linhas entre 4 e 8 e menor que as colunas: \n");
scanf("%d", &n_linhas);
}while(n_linhas < 4 || n_linhas > 8 || n_linhas >= n_colunas);

char tabuleiro_atualizado[n_linhas][n_colunas];

tabuleiro_atualizado[n_linhas][n_colunas]=desenha_tabuleiro(n_linhas, n_colunas);

printf("\nNOVO Tabuleiro\n\n");
//MOSTRA A TABELA NO ECRA
for (j = 0; j < n_linhas; j++) {
for (i = 0; i < n_colunas; ++i)
printf(" %2c |", tabuleiro_atualizado[j][i]);
printf("\n");
}
}

Obrigado

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

vamos por partes :

quantas mensagens de erro/warning o teu compilador dá ?

porquê é que as ignoraste ?

qual o tipo de dados de retorno da função que retorna o array bidimensional (desenha_tabuleiro) ?

qual o tipo de dados do teu array bidimensional (tabuleiro) ?


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Comic

Boas, o compilador não esta a dar erro nenhum ele corre o programa todo esta a dar é dois warnings que não percebo bem que são:

warning: return makes integer from pointer without a cast

warning: function address of local variable

o tipo que dados é sempre char tanto no desenha_tabuleiro como depois no main.

No desenha_tabuleiro ele mostra bem o tabuleiro todo.

Depois no main quando mostro outra vez o tabuleiro só aparece caracteres esquisitos

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

Boas, o compilador não esta a dar erro nenhum ele corre o programa todo esta a dar é dois warnings que não percebo bem que são:

então é bom que mudes de compilador

o tipo que dados é sempre char tanto no desenha_tabuleiro como depois no main.

errado.

o tipo de dados da variável tabuleiro é : char[][]

warning: return makes integer from pointer without a cast

warning: function address of local variable

o primeiro warning é porque char[][] é considerado como ponteiro e a tipo de retorno da função é char

o segundo é porque estás a retornar o ponteiro char[][] da variável tabuleiro que só faz sentido dentro do contexto da função

conclusão :

- acerta com os tipos de dados


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Comic

acertar o tipo de dados entre o valor retornado e onde vou guardar esse mesmo valor?

Já agora consegues-me dizer se esta chamada à função esta bem feita, estou a guardar o return em outro array bidimensional.

 char tabuleiro_atualizado[n_linhas][n_colunas];
tabuleiro_atualizado[n_linhas][n_colunas]=desenha_tabuleiro(n_linhas, n_colunas);

Obrigado

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
PsySc0rpi0n

Se releres as questões feitas pelo @HappyHippyHippo, provavelmente darás conta dos problemas:

char desenha_tabuleiro(int tam_linhas, int tam_colunas);

Que tipo de dados retorna aquela função???

char tabuleiro_atualizado[n_linhas][n_colunas];

Que tipo de dados é esta valiável tabuleiro_actualizado[x][y]???

@HappyHippyHippo, estou surpreendido a responderes às tuas próprias questões... :P

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Comic

char desenha_tabuleiro(int tam_linhas, int tam_colunas)

Aqui não retorna dados do tipo char?

 char tabuleiro_atualizado[n_linhas][n_colunas];

Aqui o tipo de dados é char.

Peço desculpa mas não estou mesmo a perceber o que tenho de mudar xD

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
PsySc0rpi0n

char desenha_tabuleiro(int tam_linhas, int tam_colunas)

Aqui não retorna dados do tipo char?

Correcto

 char tabuleiro_atualizado[n_linhas][n_colunas];

Aqui o tipo de dados é char.

Errado - Ponteiro para char

Nota: char é diferente de ponteiro para char

Peço desculpa mas não estou mesmo a perceber o que tenho de mudar xD

Tens que fazer com que os dados retornados por uma função sejam do mesmo tipo que o protótipo da função indica.

BTW, o HappyHippyHippo já respondeu a tudo!

Editado por PsySc0rpi0n

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.