Why does scanf() need “%lf” for doubles, when printf() is okay with just “%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.

Leave a Comment