Qual é o formato correcto para o "duplo" em printf? É %f
ou é %lf
? Acredito que sim's %f
, mas não tenho certeza.
#include <stdio.h>
int main()
{
double d = 1.4;
printf("%lf", d); // Is this wrong?
}
"%f"
é o (ou pelo menos um) formato correto para um duplo. Não existe* nenhum formato para um float
, porque se você tentar passar um float
para printf
, ele'será promovido para double
antes que o printf
o receba1. "%lf"
também é aceitável sob o padrão atual -- o l
é especificado como não tendo efeito se seguido pelo especificador de conversão f
(entre outros).
Note que este é um lugar onde o printf
formatar strings difere substancialmente do scanf
(e fscanf
, etc.) formatar strings. Para output, você're passando um valor, que será promovido de float
para double
quando passado como um parâmetro variadic. Para input you're passando um pointer, que não é promovido, então você tem que dizer scanf
se você quer ler um float
ou um double
, então para scanf
, %f
significa que você quer ler um float
e %lf
significa que você quer ler um double
(e, pelo que vale'para um long double
, você usa %Lf
para printf
ou scanf
).
%Lf
(note o maiúsculo L
) é o especificador de formato para duplas longas.
Para os duplos simples, ou %e
, %E
, %f
, %g
ou %G
serve.