Когда я компилирую и запускаю следующий фрагмент кода, результат равен 0,000000.
#include <stdio.h>
int main(void)
{
double a = 1.4;
printf("%lf", a);
return 0;
}
Когда я компилирую и запускаю этот фрагмент кода, результат равен 1.400000, как я и ожидал для первого фрагмента.
#include <stdio.h>
int main(void)
{
double a = 1.4;
printf("%f", a);
return 0;
}
Почему это так? %lf — это спецификатор формата для двойников, поэтому не должен ли первый фрагмент иметь тот же вывод, что и второй?
Кто-то задал аналогичный вопрос (Правильный спецификатор формата для double в printf) но, согласно лучшим ответам, два фрагмента должны давать одинаковый результат, поскольку «l указано как не имеющее эффекта, если за ним следует спецификатор преобразования f (среди прочего)» (цитируется из первого ответа).
Я использую кодовые блоки в качестве IDE, и я заставил компилятор gcc следовать стандарту 1999 года для C. Возможный дубликат говорит, что мой код должен работать в соответствии со стандартом C99, которому следует мой компилятор, но мой код не работает. Поэтому ответ в дубликате не решает мою проблему.