[C] Problem z wykorzystaniem funkcji
Ostatnio zmodyfikowano 2011-11-26 12:41
Matti Temat założony przez niniejszego użytkownika |
[C] Problem z wykorzystaniem funkcji » 2011-11-26 12:11:28 #include <stdio.h> int main() { double r, h, wynik; printf( "Podaj dlugosc promienia podstawy stozka: " ); scanf( "\n%lf", & r ); printf( "Podaj dlugosc wysokosci stozka: " ); scanf( "\n%lf", & h ); wynik = objetosc( r, h ); printf( "Objetosc stozka wynosi: %lf", wynik ); return; } double objetosc( double r, double h ) { return( 0.33 ) *( r * r *( 3.14 ) * h ); }
Kod oto taki. Jak zmienię wszędzie z double na int i dam jakiś prosty return typu r * h, to program działa. Z double / float mam problem tego typu, że kompilować mi nie chce. Na początku zamiast 0,33 i 3,14 wstawiłem 1/3 i 22/7, ale chyba aż takie ułamki nie mogą być przechowywane w double, więc uogólniłem. ;P Sądziłem, że to rozwiąże problem, ale jednak programowi chodziło o coś innego. Teraz zmieniłem typ funkcji objetosc z double na int i program odpalił, tyle że wynik przy danych 5 i 8 wynosi 207.000000, a nie 207, 24 jak to powinien. Ktoś może mi napisać czemu moja funkcja nie może być typu zmiennoprzecinkowego? Jak uzyskać wynik zmiennoprzecinkowy tego programu? |13|error: conflicting types for 'objetosc'| |9|note: previous implicit declaration of 'objetosc' was here| ||=== Build finished: 1 errors, 0 warnings ===| |
|
malan |
» 2011-11-26 12:16:19 Skąd kompilator ma wiedzieć co to jest objetosc? |
|
Matti Temat założony przez niniejszego użytkownika |
» 2011-11-26 12:27:29 A czy to nie zostało zadeklarowane? |
|
malan |
» 2011-11-26 12:29:39 Zostało zadeklarowane, ale po miejscu, w którym używasz funkcji pierwszy raz, a nie przed, więc kompilator tego nie widzi. |
|
Matti Temat założony przez niniejszego użytkownika |
» 2011-11-26 12:39:24 Już zrozumiałem o co chodzi, głupi błąd, dzięki. :) Tylko dziwi mnie czemu program działał dla innych typów funkcji... |
|
malan |
» 2011-11-26 12:41:50 Nie mógł działać dla innych typów funkcji :) |
|
« 1 » |