This is an old revision of the document!
Użyto niewłaściwych specyfikatorów konwersji. Specyfikatory konwersji nie weryfikują zgodności typów danych, a jedynie interpretują przekazane dane (a więc zawartość pamięci w danym miejscu) w zadany sposób.
Czyli:
printf()
oczekuje liczby całkowitej i znaku, a dostaje dwie liczby całkowite. Za drugim razem interpretuje liczbę dziesiętną jako znak z (rozszerzonego) kodu ASCII. Ok, ale ten zestaw znaków ma kody od 0 do 256! Zgadza się, dlatego “liczenie” zaczyna się od nowa, czyli $300 - 256 = 44$ (',').printf()
interpretuje jako liczbę zmiennoprzecinkową. Otrzymujemy “śmieci”, gdyż komputer zupełnie inaczej reprezentuje w pamięci te dwa typy liczb.printf()
.#include <stdio.h> #include <stdlib.h> int main() { double a, b, c; double suma, srednia; printf("Podaj 3 liczby rzeczywiste (oddzielone spacja): \n"); scanf("%lf %lf %lf", &a, &b, &c); suma = a + b + c; srednia = suma / 3; printf("Suma to: %.2f\n", suma); printf("Srednia to: %.2f\n", srednia); return 0; }
#include <stdio.h> #include <stdlib.h> int main() { int usds; printf("Podaj kwote w dolarach: "); scanf("%d", &usds); printf("$%d = %7.2f EUR\n", usds, usds * 0.77); printf("$%d = %7.2f PLN\n", usds, usds * 3.04); return 0; }