2011-01-15 10 views
6

Oto kod.Dlaczego powierzchnia powraca jako 0?

int a; 
int pi = 3.14; 
int area; 
int main() 
{ 
    cout << "Input the radius of the circle "; 
    cin >> a; 

    a *= a *= pi >> area; 

    cout << "The area is " << area; 


} 
+0

Jaka była Twoja wartość wejściowa? –

+14

3 to dość niedokładne oszacowanie dla pi. –

+5

Ten kod jest tak uszkodzony, że nie jest już zabawny. Na początek: czy zdajesz sobie sprawę, że 'cin >> ...' (i 'cout << ...') jest bardzo szczególnym przypadkiem, a '<<' (and '>>') oznacza coś bardzo odmiennego w każdym innym kontekście, włączając w to pi << obszar'? Masz szczęście, że dostałeś 0, równie dobrze możesz dostać cokolwiek. – delnan

Odpowiedz

2

Obszar okręgu to pi * r * r dlatego warto zrobić;

a = a * a * pi

nadzieję, że pomoże

i że wszyscy muszą być pływaki.

7

Nie mam dość cierpliwości, aby odcyfrować twój dziwny kod. A może po prostu area = a * a * pi?

+1

Dziękuję bardzo nieznajomemu –

1

Ponieważ używasz int lub liczby całkowitej dla wszystkich zmiennych. Chcesz użyć double s lub nawet float s. (double s są bardziej precyzyjne).

+0

Dlaczego zostałem odrzucony? – Maxpm

+0

Sądzę, że został cofnięty wniosek, ponieważ nie obejmuje on wszystkich problemów związanych z kodem (np. Próba przypisania "obszaru" za pomocą operatora '>>'). – dreamlax

1

Wszystkie zmienne są zadeklarowane jako int, które po prostu upuszczają część ułamkową, do której zostały przypisane. Aby pracować z wartościami zmiennoprzecinkowymi, użyj zamiast tego podwójnego.

Również twoje równanie jest prawie niezrozumiałe. Nie jestem pewien, co próbujesz tam zrobić.

13

Operator >> w przypadku używania z liczbami jest prawą zmianą, a nie przypisaniem. Chcesz coś podobnego

area = a * a * pi; 

Aktualizacji

Należy również użyć pływającego typu punkt lub odpowiedź nie będzie czego oczekujesz.

float a; 
float pi = 3.14f; 
float area; 
+3

Pozwala marnować trochę miejsca. Używaj podwójnie jako domyślnej wartości zmiennoprzecinkowej. –

+0

@Martin: czy to nie jest przedwczesna pesymizacja? ;) –

+2

Nie, nie jest. Czas potrzebny na debugowanie błędów zaokrąglania jest bardzo długi. – CodesInChaos

2

Twój kod nie działa zgodnie z oczekiwaniami. Nie przypisujesz zmiennych do >>; to tylko dla ekstrakcji strumienia (i bitshiftingu).

Ponadto, a *= a *= pi prawdopodobnie nie robi to, co myślisz, że robi.

Ponadto potrzebne są wartości zmiennoprzecinkowe, a nie int. Wartość "int" pi wynosi tylko 3.

Powinieneś również sprawdzić błąd podczas ekstrakcji strumienia!

Spróbuj:

int main() 
{ 
    const float pi = 3.14; 
    float a; 

    cout << "Input the radius of the circle "; 
    if (!(cin >> a)) { 
     cout << "Invalid radius!"; 
     return 1; 
    } 

    float area = (a * a * pi); 

    cout << "The area is " << area; 
} 
6

Twój kod nie ma żadnego sensu.

pi (i wszystkie inne zmienne) muszą być podwójne lub zmienne, ... nie int. Wartość int może zawierać tylko liczbę całkowitą. I pi oczywiście nie jest integralna.

a *= a *= pi >> area; powinny być area = a * a * pi;

>> jest Bitshift, a nie przypisanie do prawej strony
*= jest wielokrotnie przypisać nie tylko mnożyć. tj. jest podobny do left=left*right

+0

+1 Za pisanie tego, co napisałem, ale w dużo bardziej spójny sposób. :) –

2
int pi = 3.14; 

Niewłaściwy typ danych. Przypisywanie podwójnej wartości do int? To jest źle.

napisać to:

double pi = 3.14; 

I podobnie, aby zmienić inne typy danych double również.

Powiązane problemy