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;
}
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;
}
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.
Nie mam dość cierpliwości, aby odcyfrować twój dziwny kod. A może po prostu area = a * a * pi
?
Dziękuję bardzo nieznajomemu –
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).
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ć.
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;
Pozwala marnować trochę miejsca. Używaj podwójnie jako domyślnej wartości zmiennoprzecinkowej. –
@Martin: czy to nie jest przedwczesna pesymizacja? ;) –
Nie, nie jest. Czas potrzebny na debugowanie błędów zaokrąglania jest bardzo długi. – CodesInChaos
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;
}
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
+1 Za pisanie tego, co napisałem, ale w dużo bardziej spójny sposób. :) –
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ż.
Jaka była Twoja wartość wejściowa? –
3 to dość niedokładne oszacowanie dla pi. –
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