Поскольку он не сильно типизирован, я думал, что он просто выбрал правильный размер памяти и интерпретировал его на основе типа аргумента. Но float и double используют% f, и они имеют разные размеры.
P.S. Я могу видеть, как продвижение по копированию значения в temp и casting (это правильно?) Может работать но как это работает для scanfs/sscanf?