Ir para conteúdo

POWERED BY:

Arquivado

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

marques331

Erro em função - ou no return - ling. C

Recommended Posts

Galera, tudo bem?

Sou novo por aqui e preciso de uma ajudinha em um programinha em C.

 

O objetivo é trabalhar com a função criada e calcular os dois tipos de média, só que quando uso o printf + a função eu não consigo obter o return correto, vejam:

 

Nesta forma eu queria mostrar o return direto no ultimo printf (Assim como meu prof explicou em sala):

 

 

#include "stdio.h"
media(float n1,float n2,int op)
{
float result;
if(op==1)
{
result=(n1+n2)/2;
}
else
{
if(op==2)
{
result=((n1*4)+(n2*6))/10;
}
}
return result;
}
main()
{
int op;
float n1,n2;
printf("Digite: \n 1-Para calcular a media aritmetica. \n 2-Para calcular a media ponderada \nOpcaoo: ");
scanf("%d",&op);
system("cls"); //Limpei a tela das opçcões.
printf("Digite a N1: ");
scanf("%f",&n1);
printf("Digite a N2: ");
scanf("%f",&n2);
printf("A media e: %.2f ",media(n1,n2,op));
getch();
}

 

Eu sei que uma alternativa seria usar os comandos:

 

 

(...)float m;
...
m=media(n1,n2,op);
printf("A media e: %f ",m); .

 

Mas há algo incorreto no primeiro código?

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim.

 

Quando você declara uma função, deve sempre indicar o tipo de retorno que a função terá.

Caso contrário, o compilador (nome meu caso, o gcc) assumirá que o retorno é inteiro.

Como no teu código tem essa linha:

printf("A media e: %.2f ",media(n1,n2,op));

Ao compilar, obtive este warning:

aviso: formato ‘%f’ espera argumento do tipo ‘double’, porém o argumento 2 possui tipo ‘int’

Na função media, como não está declarado o tipo de retorno, por padrão assume o tipo int. Portanto, retorna um inteiro gerando o warning acima.

 

O segundo problema foi com a função getch(). Que não faz parte da biblioteca padrão. Substitui por getchar().

Imagino que o objetivo do uso desta função é parar o conselo para visualização do que mostrado na tela.

 

OBS.: Não esqueça do return ao final da função main.

 

Espero ter ajudado, FLW!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim.

 

Quando você declara uma função, deve sempre indicar o tipo de retorno que a função terá.

Caso contrário, o compilador (nome meu caso, o gcc) assumirá que o retorno é inteiro.

Como no teu código tem essa linha:

printf("A media e: %.2f ",media(n1,n2,op));

Ao compilar, obtive este warning:

aviso: formato ‘%f’ espera argumento do tipo ‘double’, porém o argumento 2 possui tipo ‘int’

Na função media, como não está declarado o tipo de retorno, por padrão assume o tipo int. Portanto, retorna um inteiro gerando o warning acima.

 

O segundo problema foi com a função getch(). Que não faz parte da biblioteca padrão. Substitui por getchar().

Imagino que o objetivo do uso desta função é parar o conselo para visualização do que mostrado na tela.

 

OBS.: Não esqueça do return ao final da função main.

 

Espero ter ajudado, FLW!

 

 

 

Na declaração da função tente fazer a seguinte alteração:

 

float media(float n1,float n2,int op)

Muito obrigado GBecker e leonardohipolito, entendi onde foi que eu errei e como arrumar o código;

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.