Ir ao conteúdo

Função não funciona direito


Delemar Neto

Posts recomendados

Postado

Bom dia!!

 

 

Tenho uma função que inicializa um vetor, porém os valores desse vetor não podem ser negativos

 

Porém ao acessar a posição 2 do vetor para verificar se foi digitado um valor negativo o programa da erro....

 

Alguem pode me ajudar?

void inicializarpositivo(float**, int*);int main(){int quantEleme = 0;    float *vet = NULL, *vetpositivo = NULL, result;    inicializarpositivo(&vetpositivo,&quantEleme);}void inicializarpositivo(float* *vetpositivo, int* quantEleme){    int i;    do{        printf("Digite a quantidade de valores do vetor:");        scanf("%d", quantEleme);    }while(*quantEleme<=0); //trava numero negativo    if ( (*vetpositivo = malloc((*quantEleme) * sizeof(float)) ) == NULL){        printf("Memória insuficiente");        *quantEleme = 0;        return;    }    printf("\nInforme os valores:\n");    for (i=0; i < *quantEleme; i++){        do{            printf("Informe o %d valor: ", i+1);            scanf("%f", &(*vetpositivo)[i]);        }while(*vetpositivo[i]<=0);           //<-------------------  DA ERRO AQUI NO 2º LOOP    }}
Postado

Ok!

Observe abaixo:

void inicializarpositivo(float* *vetpositivo, int* quantEleme)

 

//Na verdade essa parte que diz: int* quantEleme é um desproposito, um ponteiro para um int tem o mesmo

tamanho de um int então ao invés de como está essa parte que seja um int normal;

void inicializarpositivo(float* *vetpositivo, int quantEleme)

 

Já na função scanf basta fazer assim com e-comercial:

scanf("%d", &quantEleme);

Postado

Ok!

Observe abaixo:

void inicializarpositivo(float* *vetpositivo, int* quantEleme)

 

//Na verdade essa parte que diz: int* quantEleme é um desproposito, um ponteiro para um int tem o mesmo

tamanho de um int então ao invés de como está essa parte que seja um int normal;

void inicializarpositivo(float* *vetpositivo, int quantEleme)

 

Já na função scanf basta fazer assim com e-comercial:

scanf("%d", &quantEleme);

 

 

O erro está mais abaixo, essa parte está ok!!

 

 

O erro:

printf("\nInforme os valores:\n");    for (i=0; i < *quantEleme; i++){        do{            printf("Informe o %d valor: ", i+1);            scanf("%f", &(*vetpositivo)[i]);        }while(*vetpositivo[i]<=0); //<------------------- DA ERRO AQUI NO 2º LOOP    }
Postado

Ata!

Tem um confusão danada ai,

Não ficou bem claro para mim, me responde um coisa

é uma matriz que você deseja ou um vetor ( a diferença é que o vetor tem apenas uma linha) ?


Caso seja um vetor basta modificar assim com parenteses para o ponteiro de ponteiro:

while( (*vetpositivo)[i] <= )

Postado

Ata;

Tem um confusão danada ai,

Não ficou bem claro para mim, me responde um coisa

é uma matriz que você deseja ou um vetor ( a diferença é que o vetor tem apenas uma linha) ?

 

 

É um vetor....

 

Essa função modifica um vetor que é criado no main, para gerar uma média geométrica, onde não podem existir valores menores ou iguais a zero no vetor.

 

 

Exemplificando como ela funciona:

 

 

A função recebe como parametro um vetor e uma variável que é criada no MAIN "*vet" e "quantEleme".

Assim que recebe ela modifica os valores dessas variáveis no MAIN, não apenas localmente.

 

 

Estava funcionando tudo certo, ela também está modificando, porém como a média geométrica não pode ter valores negativos, eu precisei colocar uma condição a qual se o usuário digitar um valor negativo o mesmo terá que digitar novamente até que seja digitado o valor positivo para certa posição no vetor.

 

Aí que está o problema...

 

Nesse código:

printf("\nInforme os valores:\n");    for (i=0; i < *quantEleme; i++){        do{            printf("Informe o %d valor: ", i+1);            scanf("%f", &(*vetpositivo)[i]);        }while(*vetpositivo[i]<=0); //<------------------- DA ERRO AQUI NO 2º LOOP    }

Para i=0, ela executa normalmente, porém quando i=1 o while da um erro (pois não consegue buscar o valor armazenado em *vetpositivo[1], creio eu), e o programa para de executar e fecha.

Postado

Ok!

Então tipo: quando estão assim: *vetpositivo[i]

o que acontece é que primeiro ele acessa um vetor de ponteiro (que não existe) e depois o inteiro que não existe;

daí os erros; precedência de  

 

Pare resolver isso acredito eu que basta fazer assim e contorna a precedência com parenteses ; (*vetpositivo)[i]

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!