2011-01-15 3 views
6

Aquí está el código.¿Por qué el área de volver como 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

¿Cuál fue su valor de entrada? –

+14

3 es una estimación bastante inexacta para pi. –

+5

Este código está tan roto que ya no es divertido. Para empezar: ¿Te das cuenta de que 'cin >> ...' (y 'cout << ...') es un caso muy especial y '<<' (and '>>' significa algo muy diferente en cualquier otro contexto, incluso en ' pi << area'? Tienes suerte de que obtengas 0 sin embargo, es mejor que obtengas algo. – delnan

Respuesta

2

El área de un círculo es pi * r * r, por lo tanto, desearía hacer;

a = a * a * pi

Espero que ayude

y todos ellos tendrían que ser flotadores.

7

No tengo suficiente paciencia para descifrar su código extraño. ¿Qué tal solo area = a * a * pi?

+1

Gracias amable extraño –

1

Porque está usando int, o entero, para todas sus variables. Que desea utilizar double s o incluso float s. (double s son más precisos).

+0

¿Por qué he votado downvoted? – Maxpm

+0

Creo que sufrió una degradación porque no cubre todos los problemas con el código (por ejemplo, la asignación de "área" con el operador '>>'). – dreamlax

1

Todas sus variables se declaran como int, que simplemente descarta cualquier parte fraccionaria que se le haya asignado. Para trabajar con valores de coma flotante, use el doble en su lugar.

Además, su ecuación en casi incomprensible. No estoy seguro de lo que estás tratando de hacer allí.

13

El operador >> cuando se utiliza con números es el desplazamiento a la derecha, no la asignación. ¿Quieres algo así como

area = a * a * pi; 

actualización

También es necesario utilizar un tipo de punto flotante o su respuesta no sea el esperado.

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

Permite perder un poco de espacio. Permite usar el doble como nuestro punto flotante predeterminado. –

+0

@Martin: ¿no es esa pesimismo prematura? ;) –

+2

No, no lo es. El tiempo necesario para eliminar errores de redondeo es muy largo. – CodesInChaos

2

Su código no hace lo que creo que quería que hiciera. No se asigna a las variables con >>; eso es solo para la extracción de flujo (y cambio de bits).

Además, a *= a *= pi probablemente no haga lo que usted piensa que hace.

Además, desea valores de coma flotante, no int. Un pi "int" es solo 3.

¡Además, debe tener una comprobación de errores en la extracción de su secuencia!

Probar:

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

el código no tiene ningún sentido.

pi (y todas sus otras variables) deben ser dobles o flotantes, ... no int. Un int solo puede contener un número integral. Y pi obviamente no es integral.

a *= a *= pi >> area; debería haber area = a * a * pi;

>> es una BitShift, no una asignación a la derecha
*= se multiplican asignar y no sólo se multiplican. es decir, es similar a left=left*right

+0

+1 Por escribir lo que escribí, pero de una manera mucho más coherente. :) –

2
int pi = 3.14; 

Tipo de datos incorrecto. Asignación de valor doble a int? Eso está mal.

escribir esto:

double pi = 3.14; 

Y del mismo modo, cambiar otros tipos de datos a double también.

Cuestiones relacionadas