#include <stdio.h>
int main()
{
int n = 5, p = 9;
int q;
float x;
x = (p/n);
printf("x = %d\n",x);
return 0;
}
Dlaczego wyświetla, że x = 0
a nie x = 1.8
?
#include <stdio.h>
int main()
{
int n = 5, p = 9;
int q;
float x;
x = (p/n);
printf("x = %d\n",x);
return 0;
}
Dlaczego wyświetla, że x = 0
a nie x = 1.8
?
x = (p/(float)n);
printf("x = %f\n",x);
ponieważ dzielenie wykonuje się na intach, daje wynik 0, a dopiero potem wykonywane jest rzutowanie na float. Jeśli chcesz, żeby dzielenie było zminnoprzecinkowe przynajmniej jeden z operandów musi być zmiennoprzecinkowy. Dlatego musisz zrzutować p lub n na floata. Uprzedzając dalsze problemy, w printfie musisz dać %f zamiast %d, bo wypisujesz floata (dla double: %lf). I jeszcze masz nieużywaną zmienną.
aha dzięki.
Poszerzając wypowiedź kolegi powyżej: dzielenie (i inne działania arytmetyczne) dwóch zmiennych całkowitych zawsze będzie miało całkowity wynik. Natomiast gdy jedna z nich jest rzeczywista to obie są promowane do tego typu i na tym nowym typie są wykonywane działania.
#include <stdio.h>
int main()
{
int n = 5, p = 9;
int q;
float x;
x = p/(float)n; // tu był błąd (dzielenie int'ów)
printf("x = %f\n",x); // i tu był błąd - zły format string
return 0;
}
Wszystko widać w postach i komentarzach wyżej.