2011-01-15 8 views
6

Hier ist der Code.Warum kommt der Bereich als 0 zurück?

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

Was war Ihr Eingabewert? –

+14

3 ist eine ziemlich ungenaue Schätzung für Pi. –

+5

Dieser Code ist so kaputt, dass er nicht mehr lustig ist. Für den Anfang: Ist Ihnen klar, dass 'cin >> ...' (und 'cout << ...') ein ganz besonderer Fall ist und '<<' (and '>>') etwas anderes bedeuten als in jedem anderen Kontext, einschließlich in ' Pi << Bereich? Du hast Glück, dass du 0 bekommst, du könntest genauso gut alles bekommen. – delnan

Antwort

2

Die Fläche eines Kreises ist pi * r * r also Sie möchten tun;

a = a * a * pi

Hoffnung, die

und sie alle müßten seinen Schwimmern hilft.

7

Ich habe nicht genug Geduld, um Ihren komischen Code zu entziffern. Wie wäre es mit nur area = a * a * pi?

+1

Danke lieber Fremder –

1

Weil Sie int oder ganze Zahl verwenden, für alle Variablen. Sie möchten double s oder sogar float s verwenden. (double s sind genauer).

+0

Warum wurde ich downvoted? – Maxpm

+0

Ich denke, Sie wurden downvoted, weil es nicht alle Probleme mit dem Code (z. B. die versuchte Zuweisung zu "Bereich" mit dem Operator ">>") deckt. – dreamlax

1

Alle Ihre Variablen werden als int deklariert, wodurch einfach jeder ihr zugeordnete Bruchteil gelöscht wird. Um mit Gleitkommawerten zu arbeiten, verwenden Sie stattdessen double.

Auch Ihre Gleichung in fast unverständlich. Ich bin mir nicht sicher, was du da machen willst.

13

>> Der Bediener, wenn mit Zahlen verwendet wird, ist Rechtsverschiebung, nicht-Zuordnung. Sie wollen so etwas wie

area = a * a * pi; 

aktualisieren

Sie müssen auch sein wird keinen Gleitkommatyps oder Ihre Antwort verwenden, was Sie erwarten.

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

Lässt etwas Platz verschwenden. Verwenden wir Double als unseren Gleitkomma-Standard. –

+0

@Martin: Ist das nicht vorzeitige Pessimierung? ;) –

+2

Nein ist es nicht. Die Zeit, die zum Debuggen von Rundungsfehlern benötigt wird, ist viel zu lang. – CodesInChaos

2

Ihr Code tut nicht, was ich denke, dass Sie es tun wollten. Sie weisen Variablen nicht mit >> zu; das ist nur für die Stream-Extraktion (und Bitshifting).

Auch a *= a *= pi wahrscheinlich nicht tun, was Sie denken, es tut.

Auch wollen Sie-Floating-Point-Werte, nicht int. Ein "int" pi ist nur 3.

Auch sollten Sie Fehlerprüfung auf Ihrem Stream-Extraktion haben!

Versuchen:

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

Ihr Code macht keinen Sinn machen.

pi (und all Ihre anderen Variablen) müssen doppelt oder float sein, ... nicht int. Ein int kann nur eine ganze Zahl enthalten. Und pi ist offensichtlich nicht integral.

a *= a *= pi >> area; sollte area = a * a * pi; sein

>> a bitshift ist, nicht eine Zuordnung zur rechten Seite
*= multiply zuweisen und nicht nur vermehren. das heißt es ist ähnlich wie left=left*right

+0

+1 Zum Schreiben, was ich geschrieben habe, aber in einer viel kohärenteren Art und Weise. :) –

2
int pi = 3.14; 

Wrong Datentyp. Zuweisen von Doppelwert zu int? Das ist falsch. diese

schreiben:

double pi = 3.14; 

Und ebenso andere Datentypen als auch auf double ändern.

Verwandte Themen