Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
jpedro20

Tipo void e int

Recommended Posts

jpedro20

Boas pessoal,

é possível sair de uma função que retorna um inteiro com um printf (sem usar a função exit())?

Por exemplo:

int numeros(int p)
{
if (...)
     printf("blablabla");
else
     ...
     return p;
}

Com exit() dá mas existe outra maneira de contornar o problema?

cumprimentos

Share this post


Link to post
Share on other sites
pwseo

Não estou a perceber bem a dúvida... Tens que devolver um inteiro no final da função. Se tu não o especificares, vai ser um inteiro ao acaso, o que provavelmente é bem pior que seres tu a definir um.

ou seja, ali a seguir ao printf tens que ter um return

Share this post


Link to post
Share on other sites
jpedro20

Bem é o seguinte. Imaginemos a seguinte função:

int numero (int p)
{
  if (p==0)
  {
      printf("O número não pode ser somado");
      return 1;
  }
  else
  {
     p=p+p;
     return p;
  }
}

Quando invocar a função em main o que me irá aparecer se p=0 é isto:

O número não pode ser somado

1

Eu não queria que aparece-se aquele um. Se depois do printf colocares exit(EXIT_SUCCESS) em vez de return, o resultado é:

O número não pode ser somado

Estou a perguntar se existe outra forma de obter o mesmo resultado de cima sem utilizar o exit().

Share this post


Link to post
Share on other sites
Baderous

O problema é que estás a misturar código da camada de apresentação com código da camada lógica. Essa função, pelo que eu percebi, tem 2 casos:

- o caso em que somas p com p e devolves p (isto é, para p==1)

- o caso em que p==0 onde não é suposto somar nada.

Neste segundo caso, o que deves fazer é devolver um valor especial, por exemplo, -1, que vai ser aproveitado por uma função da camada de apresentação que, mediante o inteiro que receba (valor da soma ou -1), vai mostrar uma mensagem diferente (o valor da soma ou a frase "O número não pode ser somado").

Share this post


Link to post
Share on other sites
pwseo

Exacto, é como o baderous disse. Não fica muito bem teres esse printf no meio dessa função.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.