Enviar um café pro programador

Pode me ajudar a transformar cafeína em código?

O comando return - obtendo resultados das funções

Se você tiver notado bem, até o momento, em nosso estudo sobre as funções na linguagem C, as tarefas foram todas realizadas dentro das funções.

E se quiséssemos obter o resultado da soma, que foi calculada internamente da função soma()? Ou o resultado do produto? Nem sempre exibir os resultados, como foi feito no exemplo de programa em C passado e quando usamos funções aninhadas, é o que queremos.

Muitas vezes queremos o resultado em si, e é isso que aprenderemos nesse artigo de nossa apostila.

Clique aqui e saiba como obter seu certificado de programação C! Entre já no Mercado de Trabalho!

O que é e como usar o comando return em C

Lembra que declaramos as funções com uma palavrinha no começo, void ?
Pois é, void em inglês quer dizer vazio, sem nada. O que isso quer dizer?

Por definição, toda função em C retorna algo, algum valor, variável. Pode retornar um inteiro, um float, um caractere, um vetor, struct ou outro tipo que você criou (veremos tudo isso em nosso curso online de C).

O void serviu pra indicar que tais funções não retornavam nada. E é verdade.
Elas simplesmente mostravam algo na tela, faziam uns cálculos, mas tudo ficava dentro do escopo das funções. Do lado de fora delas, não tínhamos acesso a esses cálculos.
Era como se as funções fossem caixas-pretas inacessíveis.

Pois bem, poucas coisas em programação são isoladas assim.
Na verdade, os diversos aplicativos e tarefas de uma máquina se comunicam, mandando informação um pro outro. E boa parte dessa comunicação é feita através do retorno das funções.

Se você já estudou outras linguagens, em Java as funções são chamadas de métodos e em Perl, de sub-rotinas. Nomes diferentes, mas ‘função’ parecida.

Se vamos retornar alguma informação de uma função, não vamos mais usar o void.
Vamos usar outros tipos conhecidos.

Exemplo de código C

Crie uma função que recebe dois números como argumentos e retorna a soma deles.

Vamos criar, na main(), três variáveis inteiras: duas para pedir ao usuário e uma terceira que irá armazenar o resultado da soma dessas variáveis.
Porém, essa soma será feita na função soma().

Declaramos, dentro dessa função, um inteiro ‘c’ que irá armazenar o valor da soma dos parâmetros. Vamos passarmos ‘num1’ e ‘num2’ como argumentos para a função de soma, que sempre armazena esses valores como ‘a’ e ‘b’, pois não importa o nome das variáveis que a função recebe, ela apenas colhe o valor e armazena em ‘a’ e ‘b’.

E a variável que declaramos dentro da função vai receber esse valor inteiro.
Como declaramos a função como: int soma(int a, int b), ela tem que retornar um valor inteiro No caso, ‘c’.

Usamos o comando return para retornar esse valor: return c;
Veja como ficou nosso código C:

#include <stdio.h>
 
int soma(int a, int b)
{
    int c;
    c = a + b;
    return c;
}
 
int main()
{
    int num1,
        num2,
        result;
 
    printf("Numeros a serem somados: ");
    scanf("%d", &num1);
    scanf("%d", &num2);
 
    result = soma(num1, num2);
 
    printf("Resultado: %d\n", result);
}





Exemplo de código

Escreva uma função que recebe dois floats como argumento, e retorna o produto deles.
Use o mínimo de variáveis possíveis.

No exemplo passado, declaramos a variável ‘c’ e a variável ‘result’ apenas para efeito de organização e didática, pois poderíamos ter feito:
return (a+b);
e
printf(“Resultado: %d\n”, soma(num1,num2));

Veja como fica o código da função que multiplica dois floats:

#include <stdio.h>

float produto(float a, float b)
{
    return (a*b);
}

int main()
{
    float num1,
          num2;

    printf("Numeros a serem multiplicados: ");
    scanf("%f", &num1);
    scanf("%f", &num2);

    printf("Resultado: %.2f\n", produto(num1,num2));
}

13 comentários:

Kaique Nunes disse...

Ótimo! Isso abre mais inúmeras vantagens e facilita na programação. Muito bem explicado. Brigado.

Anônimo disse...

CPROGRESSIVO é muito legal. É uma fonte riquíssima para pesquisas. Códigos interessantes e muitíssimo bem explicados

Unknown disse...

Se eu tivesse dinheiro, concerteza doaria pois aprendi muito com vocês.
Deus abençoe...

wesley disse...

\(*~*)/ Muito Bom... Mas Fiquei Com Duvida na Parte do return ele Retorna os Valores que o usuario deixou nas variaveis num1 e num2 para
a função 'produtor' que setia o ( float a, float b)?

Unknown disse...

obrigado ..vocês me ajudaram muito ...

Anônimo disse...

Muito SHOW!CPROGRESSIVO É uma fonte riquíssima.........................

Anônimo disse...

Olá, sou iniciante e uma coisa que me confunde é como que o Num1 sabe que é o a, e como o Num2 sabe que é o b, se o a não recebeu o valor Num1 e nem o b recebeu o valor Num2 tipo int a= Num1; int b= Num2

d2 disse...

estou aprendendo muito com o Cprogressivo

Natã Marques disse...

Eu só não consigo entender oque significa esse RETORNAR UM VALOR..
Como assim retornar? Eu entendi toda a lógica do return...mas não entendo essa palavra usada "RETORNAR UMA FUNÇÃO"

Anônimo disse...

Só relembrando...
as variáveis num1 e num2 declaradas na main (função principal) são os argumentos da função soma e da função produto.
Argumentos são os valores dos parâmetros.
Os parâmetros são as variáveis que a função recebe (no caso, a e b).
Dessa forma, ao invocar a função, você passa os argumentos
ex da função produto:
a e b são as variáveis da função produto
na função main() você recebe os números que serão multiplicados (num1 e num2)
e invoca a função produto na função main():
produto(num1,num2); //ao fazer isso, fica subentendido que a = num1 e b = num2, pois é respectivo.
ou seja, num1 e num2 serão os argumentos dos parâmetros a e b.
Caso ainda esteja confuso, dá uma voltada lá na parte de Argumentos e Parâmetros ;) http://www.cprogressivo.net/2013/03/Argumentos-e-Parametros-em-C-Funcoes-Aninhadas.html

Unknown disse...

Mas como se retorna o endereço de uma conteiro criado dentro da função?

Unknown disse...

Marcelo Alves, a função faz uma associação por posição.

quando ele usou "produto(num1,num2)" a função produto() associou num1 a float a. E num2 a float b. Por associação de posição, respectivamente... deu pra entender?

Anônimo disse...

você não precisa especificar cada variaáel, sendo do tipo inteira ele ira reconhecer.