Desde 1999, la coincidencia entre los especificadores de formato y los tipos de argumento de coma flotante en C es consistente entre printf
y scanf
. Es
%f
para float
%lf
para double
%Lf
para long double
Lo que pasa es que cuando argumentos de tipo float
se pasan como parámetros variadic, tales argumentos se convierten implícitamente escribir double
. Esta es la razón por la cual en printf
, los especificadores de formato %f
y %lf
son equivalentes e intercambiables. En printf
puede "usar de forma cruzada" %lf
con float
o %f
con double
.
Pero no hay razón para hacerlo en la práctica. No use %f
a printf
argumentos del tipo double
. Es un hábito generalizado que nació en C89/90 veces, pero es un mal hábito. Utilice %lf
en printf
para double
y mantenga %f
reservado para float
argumentos.
No entiendo lo que quiere decir con POINTER aquí. En scanf solo pasamos la dirección variable (ie) entonces dónde está el puntero –
@deetchanya En C, cuando "toma la dirección de" una variable con el operador unario '&', el resultado de esa operación es un puntero al ubicación de almacenamiento de la variable en la memoria. Es ese puntero que se pasa a 'scanf'. – zwol
esta es una publicación más sobre este https: // stackoverflow.com/questions/9291348/why-is-scanf-not-working-as-expected-when-writing-to-a-string-literal – vimalpt