operador condicional II [RESOLVIDO]

1. operador condicional II [RESOLVIDO]

Luiz Carlos de Moura
lcmoura

(usa Ubuntu)

Enviado em 31/10/2009 - 08:30h

Pessoal, alguém poderia me dar uma dica de onde pode estar o problema com o programa que listo a seguir?

#include <stdio.h>
#include <math.h>
int main()
{
double db1, db2;
printf("\nDigite dois numeros: ");
scanf("%1f%1f",&db1,&db2);
(!db1 && !db2) ? printf("Indefinido\n") : printf("Arco-tangente de %1f / %1f = %1f", db1,db2,!db2 ? (PI/2) : atan2(db1,db2));
return 0;
}

O programa acima não mostra os valores digitados (mas imprime 0.000000 no lugar de db1 e db2)e dá como resultado a cada vez valores levementes diferentes de pi/2 (1.57)

Tem algum matemático aí que possa me ajudar? Ou é só bug de programação?
Obrigado!

Luiz Moura



  


2. MELHOR RESPOSTA

Marcos Paulo Ferreira
Daemonio

(usa Slackware)

Enviado em 09/11/2009 - 12:59h

bug de programação mesmo.. você está utilizando %<um>f para fazer a leitura de um double com o scanf.. o certo seria %lf (l de linux).

Não sei ao certo, mas com %<um>f o scanf espera um float, entretanto
ele tah lendo para uma variável do tipo double, e é aí que ocorre
a conversão para 0.000000.

[]'s

3. Re: operador condicional II [RESOLVIDO]

Luiz Carlos de Moura
lcmoura

(usa Ubuntu)

Enviado em 14/11/2009 - 07:16h

É isso mesmo!
Agora não me lembro se foi intencional ou distração ter usado 1(um) e não l(ele).
Não sei porque na transcrição não tinha incluído a definição de PI. Com o Dev C++ isso é necessário, mas talvez com o gcc ou o djgpp não seja necessário - é isto mesmo?
Alterei também a string "Arco-tangente de %lf / %lf = %lf", mas rodou sem essa alteração também.
Eis a lista final:

#include <stdio.h>
#include <math.h>
#define PI 3.141593
int main()
{
double db1, db2;
printf("\nDigite dois numeros: ");
scanf("%lf%lf",&db1,&db2);
(!db1 && !db2) ? printf("Indefinido\n") : printf("Arco-tangente de %lf / %lf = %lf", db1,db2,!db2 ? (PI/2) : atan2(db1,db2));
return 0;
}

Realmente o c e o c++ precisam de muita atenção. Muitos erros não são pegos pelos compiladores, são?
Muito obrigado, mas muito obrigado mesmo!