Od С99 dopasowanie między specyfikatorami formatu i zmiennoprzecinkowymi typami argumentów w C jest zgodne między printf
i scanf
. Jest
%f
dla float
%lf
dla double
%Lf
dla long double
tak się składa, że gdy argumenty typu float
są przekazywane jako parametry o zmiennej liczbie argumentów, takie argumenty są niejawnie konwertowane wpisać double
. Z tego powodu specyfikatory formatu printf
w formacie %f
i %lf
są równoważne i wymienne. W printf
można "krzyżowo używać" pod numer %lf
z float
lub %f
z double
.
Ale nie ma powodu, aby faktycznie to robić w praktyce. Nie używaj argumentów typu %f
do printf
typu double
. Jest to powszechny zwyczaj urodzony w C89/90 razy, ale jest to zły nawyk. Użyj %lf
w printf
dla double
i zachowaj %f
zarezerwowane dla argumentów .
Nie rozumiem, co masz na myśli przez POINTER tutaj. W scanf podajemy tylko adres zmienny (tj.), Więc gdzie znajduje się wskaźnik –
@deetchanya In C, kiedy "przyjmiemy adres" zmiennej z operatorem jednoargumentowym '&', wynikiem tej operacji jest wskaźnik do miejsce przechowywania zmiennej w pamięci. Jest to wskaźnik, który jest przekazywany do 'scanf'. – zwol
to kolejny wpis dotyczący tego https: // stackoverflow.com/questions/9291348/why-is-scanf-not-working-as-expected-when-writing-to-a-string-literal – vimalpt