Kiedy wykonanie tego kodu zwraca mi 1610612736Jak pomnożyć liczbę całkowitą w C?
void main(){
float a=3.3f;
int b=2;
printf("%d",a*b);
}
Dlaczego i jak to naprawić?
edycja: nie jest jeszcze sprawą całkowitej i pływak, jeśli wymienić Int b = 2: przez pływak b = 2.0f zwróci sam wynik głupie
Jest to kwestia liczby całkowitej i zmiennoprzecinkowej - zobacz moją odpowiedź. –
@Carl ma rację. Nie może to być problem typu "float/int" z samym mnożeniem, ale _definitely_ jest w ciągu formatującym. – paxdiablo
Funkcja 'printf' jest metodą * varargs *, z podpisem' int printf (format const char *, ...) '. Oznacza to, że przyjmuje on arbitralne argumenty po pierwszym i nie może ich sprawdzić w czasie kompilacji lub * rzutuje je na żądany typ wzięty z ciągu formatu *. Twój ciąg formatu mówi '% d', który szuka' int'. Wyrażenie "a * b" to 'float', które zostaje przekształcone w' double'. Te typy nie mają nawet tego samego rozmiaru pamięci, więc tymczasowe "podwójne" zostaje fizycznie przecięte na pół i traktowane jako "int". To nie jest rozwiązanie salomoneka. –