There is such code:
#include
int main() {
float d = 1.0;
int i = 2;
printf(\"%d %d\", d, i);
getchar();
return 0;
}
printf doesn't just use the format codes to decide how to print its arguments. It uses them to decide how to access its arguments (it uses va_arg internally). Because of this, when you give the wrong format code for the first argument (%d instead of %f) you don't just mess up the printing of the first argument, you make it look in the wrong place for all subsequent arguments. That's why you're getting nonsense for the second argument.