Why is it that scanf() needs the l in \"%lf\" when reading a double, when printf() can use \"%f
scanf()
l
%lf
double
printf()
%f
Because C will promote floats to doubles for functions that take variable arguments. Pointers aren't promoted to anything, so you should be using %lf, %lg or %le (or %la in C99) to read in doubles.
%lg
%le
%la