Jump to content

Erro numa funçao MUITO simples


Polmax
 Share

Recommended Posts

#include <stdio.h>

int main ()
{
printf ("%d",maior3);

Nao, nao! Desta maneira maior3 é um ponteiro ... que é interpretado pelo printf como inteiro!

Tens que usar parentesis para chamar a funcao: printf("%d\n", maior3());

}

/* ... */

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Link to comment
Share on other sites

Ahhhhh pois nao sabia, foi oficialmente o primeiro programinha que fiz em C  ?

Agora dame um erro diferente

#include <stdio.h>
//Ler 3 valores inteiros e "imprimir" o maior

//Main unicamente "imprime uma funcao auxiliar com o nome de maior3"
int main ()
{
printf ("%d\n",maior3 ());
}

//funcao auxiliar, compara 3 numeros inteiros e retorna o maior
int maior3 ()
{
int n1,n2,n3;
scanf ("%d","%d","%d",&n1,&n2,&n3);
if ((n1>n2)&&(n1>n3))
    return (n1);
else
{
   if (n2>n3)
      return (n2);
   else return (n3);
}
}

Erro->

In function ‘maior3’:

warning: writing into constant object (argument 2) [-Wformat]

warning: format ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘char *’ [-Wformat]

Link to comment
Share on other sites

Agora dame um erro diferente

int maior3 ()
{
int n1,n2,n3;
scanf ("%d","%d","%d",&n1,&n2,&n3);

Tens que ter os %d numa unica string. O scanf() desenrasca-se assim

if (scanf("%d%d%d", &n1, &n2, &n3) != 3) /* erro */;

Tambem usei o valor de retorno do scanf(); neste caso, se for diferente de 3 indica que houve erro de leitura (3 porque estas a tentar ler para as 3 variaveis n1, n2, e n3).

warning: format ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘char *’ [-Wformat]

Quanto ao erro especificamente, o scanf tenta meter um int (par causa do primeiro "%d") no sitio de memoria onde esta o segundo "%d" ... mas este segundo "%d" e um char * e o scanf precisa de um int *.

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Link to comment
Share on other sites

Se quiseres que o utilizador tenha de meter virgulas logo a seguir aos numeros ... 😄

O "%d,%d,%d" é interpretado como

1) %d: ignora espacos em branco, le um inteiro, se possivel; senao devolve 0

2) , (a virgula): le uma virgula e ignora-a, se nao for possivel devolve 1

3) outro %d: ibnora espacos em branco, le um inteiro; se nao for possivel devolve 1

4) outra virgula

5) outro %d

Ou seja, o input "4, 6, 8" iria meter 4 em a, 6 em b, e 8 em c e devolver 3;

O input "dois, 3, 4" iria devolver 0 sem meter nada valido em a, nem b, nem c

O input "2 3 4" iria devolver 1, meter 2 em a, e nao meter nada valido em b nem c.

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Link to comment
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
 Share

×
×
  • Create New...

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.