Função com múltiplos retornos em C [RESOLVIDO]

1. Função com múltiplos retornos em C [RESOLVIDO]

Lucas
DcoderLA

(usa Debian)

Enviado em 02/11/2020 - 17:12h

Boa tarde pessoal, tudo bem ?

Estou criando uma função onde quero retornar mais de um valor, mas sei que a linguagem C não permite isso. Então pensei em criar um vetor para guardar os valores e retornar o vetor, mas não estou conseguindo pois aparece o seguinte erro na imagem abaixo.

Eis o código:
/* Auxiliar para a ordenação por QUICK SORT */
int quick_sortR(int *v, int ini, int fim) {

int j;
static int retorno[2], troca = 0, comp = 0;
FILE *arq;
if (ini < fim)
{
j = particao(v, ini, fim);
comp++;
if(ini < (j -1)) {
quick_sortR(v, ini, fim);
troca++;
}

if((j+1) < fim) {
quick_sortR(v, j + 1, fim);
troca++;
}

}

retorno[0] = troca;
retorno[1] = comp;

return retorno;

// printf("\nTrocas: %d Comparações: %d\n", troca, comp);
/* arq = fopen("arq_ordenacao.txt", "a");

if (arq == NULL)
printf("\nErro ao imprimir arquivo\n");

fprintf(arq, "\n==================================================================");
fprintf(arq, "\n* QUICK SORT *");
fprintf(arq, "\n==================================================================");
fprintf(arq, "\nTrocas: %d\tComparações: %d\n", troca, comp); */
}

/* Ordenação por QUICK SORT */
void quick_sort(int *v, int tam) {

int *r;

r = quick_sortR(v, 0, tam -1);

printf("\nTrocas: %d Comparações: %d\n", r[0], r[1]);

}


Alguem poderia me dizer onde estou errando ? Desde já agradeço e bom feriado a todos.

"Behaves ..."


  


2. Re: Função com múltiplos retornos em C [RESOLVIDO]

Lucas
DcoderLA

(usa Debian)

Enviado em 02/11/2020 - 17:42h

Achei o meu erro hehe. Estava na forma de declarar a função. O correto seria declarar ela como um ponteiro:

int * quick_sortR(int *v, int ini, int fim); 


int * quick_sortR(int *v, int ini, int fim) {

int j;
static int *retorno, troca = 0, comp = 0;
// FILE *arq;

retorno = malloc(2 * sizeof(int));

if (ini < fim)
{
j = particao(v, ini, fim);
comp++;
if(ini < (j -1)) {
quick_sortR(v, ini, fim);
troca++;
}

if((j+1) < fim) {
quick_sortR(v, j + 1, fim);
troca++;
}

}

retorno[0] = troca;
retorno[1] = comp;

return retorno;
}


Assim deu certo....






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts