Ir para conteúdo

POWERED BY:

Arquivado

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

alfacar90

função retorna um valor incorreto

Recommended Posts

estou tentando resolver o seguinte exercício:

 

Leia um inteiro n, armazene n números lidos do teclado em um vetor, e imprima o retorno de uma função que calcule a soma dos elementos deste vetor.

 

o meu código ficou assim.

 

#include <stdio.h>
#include <stdlib.h>

int somavet(int*vetor, int n){
     int i;
     int soma=0;
     for(i=0; i<n; i++)
          soma=soma+vetor[i];
     return soma;
}
int main(){
     char *vet;
     int n,i,s;
     
     printf("Informe um numero inteiro:");
     scanf("%d", &n);
     vet=(int *)malloc(n*sizeof(int));
     if(vet == NULL){
          printf("\nMemoria insuficiente.");
          exit(1);
     }
     for (i=0;i<n;i++){
     printf("\nInforme outro numero inteiro.");
     scanf("%d", &vet[i]);
     }
     printf("A soma dos n inteiros eh:%d\n",somavet(&vet,n));
     free(vet);
     system("Pause");
     return 0;
}

 

uso o dev-c++ e o código compila normalmente mas o retorno da função somavet dá um número muito grande.

por exemplo em vez de retornar menor que 10, retorna um número muito mais alto.

 

desde já obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem certeza que a tipagem (quais os tipos dos parametros da função "soma" e quais os tipos dos parametros passados?) está certa? Eu acho que não.

O compilador não mandou nenhum aviso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

reparei que declarei uma variavel que não usei mas esse não é o problema.

crie *vet como char em vez de int, já corrigi isso mas mesmo assim a função somavet retorna um valor incorreto.

e o compilador não avisa nada, compila e executa "normalmente".

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem certeza que os tipos dos parametros passados para a função somavet estão corretos?

O teu compilador deveria mandar um warning.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não, não são...

somavet(&vet,n)

n é do tipo int, o segundo parametro de somavet deve ser int, até aí está OK.

vet é do tipo int*, &vet é do tipo int** mas o primeiro parametro de somavet deve ser do tipo int*. O erro está aí.

 

É por essas e outras que eu digo, não utilizem IDE's.

Aprendam a trabalhar com as ferramentas "na unha".

Se você compilar esse código, no gcc, com as opções -Wall -Wextra ele com certeza te avisará que há algo errado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.