2015-10-04 1 views
0

Я знаю, что вы, как правило, не хотите погасить весь свой код, но это коротко и поможет с проблемой. Может кто-нибудь объяснить, почему вывод равен 0 и как я могу изменить код для вывода того, что должно быть объемом конуса.В C мой выход функции всегда равен 0,000000. Это потому, что два входа являются int?

#include <stdio.h> 

float ConeVolume(int height, int radius); 

float ConeVolume(int height, int radius) 
{ 
    float pi; 
    pi = 3.14159; 
    float third; 
    third = (1/3); 
    float vol; 
    vol = third * pi * radius * radius * height; 
    return vol; 
} 


int main() 
{ 
float x = ConeVolume(12,10); 
printf("%.4f \n", x); 
} 

Редактировать: спасибо всем, кто так быстро ответил. Отличная община здесь.

+1

Скомпилируйте все предупреждения и информацию об отладке ('gcc -Wall -Wextra -g'). Затем используйте отладчик ('gdb') одним шагом вашей программы. Вы бы быстро нашли свою ошибку (быстрее, чем спрашивать здесь). –

+0

Есть несчетные дубликаты этого на SO –

ответ

7
1/3 

представляет собой целое деление и всегда приводит к 0.

Чтобы это оценить переменной с плавающей точкой, вы могли бы сделать

1./3 

или

1/3. 

или

1./3. 

или даже более явным

(float)1/(float)3 

например.

+0

Я собирался добавить (не совсем серьезно), что это не оператор '. /' В действии там :) Но тогда вы показали другие варианты, и я думаю, стало ясно, что вы разделительные поплавки :) –

+0

Ах да, пропустил './'-оператор ... dxxm, не удалось снова ;-) @ JohannesSchaub-litb – alk

+0

Это не оператор'./', это оператор'/', примененный к '1.' и' 3' –

0

Попробуйте это;

#include <stdio.h> 

float ConeVolume(int height, int radius) 
{ 
    float pi, vol; 
    pi = 3.14159; 
    vol = (pi * radius * radius * height)/3; 
    return vol; 
} 


void main() 
{ 
    float x = ConeVolume(12,10); 
    printf("%.4f \n", x); 
    system("pause"); 
}