Printf nie wyświetla liczby

0

W poniższym kodzie po uruchomieniu wyświetla mi wartość 0.0000. Wydaje mi się, że wszystko robię poprawnie. Może kotś mi powiedziec jak to poprawnie wyświetlić?

 #include <stdio.h>

int main(void) {
	long double a = 5.2l;	
	printf("%Lf", a);	
	return 0;
}
1

U mnie 5.200000, więc to chyba nie kwestia poprawności kodu

0

Niezły trolling kolego.

za dwójką napisał L

0

Błękitny Rycerz jaki troling? Język C dopuszcza takie oznaczanie. Przypuszczam, że jest to błąd kompilatora, ale dlaczego, nie mam pojęcia.

7

Sprawdziłem kilka kompilatorów: GCC DJGPP, GCC MinGW, MSVC++, OpenWatcom, Embarcadero C++ i problem jest tylko pod MinGW-em.
Prawdopodobnie dlatego, że MinGW używa msvcrt.dll jako biblioteki standardowej C (jest to biblioteka której używa sam Windows, ale MS nie zaleca używania jej we własnych programach).
I tu mamy problem, bo long double dla GCC to liczba 96-bitowa (sizeof wynosi 12), a dla MSVC++ (którym na pewno skompilowano msvcrt.dll) long double to to samo co double (sizeof = 8).

Zatem błąd jest po stronie MinGW-a, konkretnie w kwestii użycia systemowego msvcrt.dll mimo niezgodności typu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1