2011-01-15 38 views
6

Đây là mã.Tại sao khu vực trở lại là 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

Giá trị đầu vào của bạn là gì? –

+14

3 là một ước tính khá không chính xác đối với pi. –

+5

Mã này bị hỏng, nó thậm chí không buồn cười nữa. Đối với người mới bắt đầu: Bạn có nhận ra rằng 'cin >> ...' (và 'cout << ...') là một trường hợp rất đặc biệt và '<<' (and '>>') có nghĩa là một cái gì đó rất khác biệt trong mọi ngữ cảnh khác, kể cả trong ' pi << area'? Bạn may mắn bạn nhận được 0 mặc dù, bạn cũng có thể nhận được bất cứ điều gì. – delnan

Trả lời

2

Diện tích hình tròn là pi * r * r do đó bạn sẽ muốn thực hiện;

a = a * a * pi

Hy vọng rằng sẽ giúp

và tất cả họ sẽ cần phải được nổi.

7

Tôi không đủ kiên nhẫn để giải mã mã lạ của bạn. Làm thế nào về chỉ area = a * a * pi?

+1

Cảm ơn bạn loại người lạ –

1

Vì bạn đang sử dụng int hoặc số nguyên cho tất cả các biến của mình. Bạn muốn sử dụng double s hoặc thậm chí float s. (double s chính xác hơn).

+0

Tại sao tôi bị bỏ phiếu? – Maxpm

+0

Tôi nghĩ rằng bạn đã bị downvoted vì nó không bao gồm tất cả các vấn đề với mã (ví dụ: việc giao nhiệm vụ cho 'khu vực' sử dụng toán tử' >> '). – dreamlax

1

Tất cả các biến của bạn được khai báo là int, chỉ đơn giản là giảm bất kỳ phần phân số nào được gán cho nó. Để làm việc với các giá trị dấu phẩy động, hãy sử dụng hai lần thay thế.

Ngoài ra, phương trình của bạn hầu như không thể hiểu được. Không chắc bạn đang cố làm gì ở đó.

13

Toán tử >> khi được sử dụng với số là dịch chuyển đúng, không được gán. Bạn muốn một cái gì đó giống như

area = a * a * pi; 

Cập nhật

Bạn cũng cần phải sử dụng một loại dấu chấm động hay câu trả lời của bạn sẽ không được những gì bạn mong đợi.

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

Cho phép lãng phí một số không gian. Cho phép sử dụng gấp đôi làm mặc định dấu phẩy động của chúng tôi. –

+0

@Martin: không phải là sự bi quan quá sớm? ;) –

+2

Không phải vậy. Thời gian cần thiết để gỡ lỗi các lỗi làm tròn là rất dài. – CodesInChaos

2

Mã của bạn không làm những gì tôi nghĩ bạn muốn làm. Bạn không chỉ định cho các biến có >>; đó là chỉ cho khai thác dòng (và bithifting).

Ngoài ra, a *= a *= pi có thể không làm những gì bạn nghĩ.

Ngoài ra, bạn muốn giá trị dấu phẩy động, không phải là int. Chỉ số "int" pi chỉ là 3.

Ngoài ra, bạn nên kiểm tra lỗi khi trích xuất luồng của mình!

Hãy thử:

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

Mã của bạn không thực hiện bất kỳ ý nghĩa.

pi (và tất cả các biến khác của bạn) cần phải là gấp đôi hoặc nổi, ... không phải int. Một int chỉ có thể chứa một số nguyên. Và pi rõ ràng là không thể tách rời.

a *= a *= pi >> area; nên area = a * a * pi;

>> là một bitshift, không phải là một nhiệm vụ để phía bên phải
*= được nhân nhượng và không chỉ nhân. tức là nó tương tự như left=left*right

+0

+1 Để viết những gì tôi viết, nhưng theo cách mạch lạc hơn rất nhiều. :) –

2
int pi = 3.14; 

Sai datatype. Gán giá trị kép cho int? Sai rồi.

Viết này:

double pi = 3.14; 

Và tương tự như vậy, thay đổi kiểu dữ liệu khác để double là tốt.

Các vấn đề liên quan