Ir ao conteúdo
  • Cadastre-se

Função não funciona direito


Delemar Neto
Ir à solução Resolvido por Ansi C,

Posts recomendados

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    }}
Link para o comentário
Compartilhar em outros sites

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);

Link para o comentário
Compartilhar em outros sites

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    }
Link para o comentário
Compartilhar em outros sites

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] <= )

Link para o comentário
Compartilhar em outros sites

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.

Link para o comentário
Compartilhar em outros sites

  • Solução

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]

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber 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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!