01/10/2018, 13:47
Struct trong C++: Hàm tính chu vi đa giác N đỉnh
Em gặp Abort khi chạy chương trình sau:
Không biết bị lỗi ở đâu, mong anh/ chị giúp đỡ:
//Câu 3. Viết hàm tính chu vi đa giác N đỉnh (N>=3), bắt buộc sử dụng kiểu dữ liệu tự định nghĩa. (2 điểm)
#include <iostream>
using namespace std;
struct daGiac
{
int socanh;//số cạnh
float length[100]; // chiều dài mỗi cạnh
};
void nhapDaGiac(daGiac a);
void nhapDaGiac(daGiac a)
{
cout << "Nhap so canh cua da giac";
cin >> a.socanh;
for (int i = 0; i <= a.socanh-1; i++)
{
cout << "Nhap canh thu " << i+1 << ": ";
cin >> a.length[i];
}
}
float chuViDaGiac(daGiac a);
float chuViDaGiac(daGiac a)
{
float chuVi = 0;
for (int i = 0; i <= a.socanh - 1; i++)
{
chuVi += a.length[0];
}
return chuVi;
}
int main()
{
daGiac a;
nhapDaGiac(a);
cout << "Chu vi da giac do la:" << chuViDaGiac(a) << endl;
cout << "
==================================
" << endl;
return 0;
}

Bài liên quan
Mọi người giúp em với ạ.
Hi Hello World.
Bạn thử debug chưa ?
Đọc cho kĩ đoạn này vào.
Không biết sao chứ mình chạy chương trình của bạn bằng codeblock vẫn bình thường, không bị Abort.
Chỗ bạn noname00 chỉ ra đúng là sai nhưng chỉ sai về mặt tính toán thôi chứ không ảnh hưởng đến chương trình.
Mình có lời khuyên cho bạn là đặt tên project hay tên folder, tên file … không nên dùng tiếng Việt có dấu.
Ví dụ: de1 thay vì Đề_1
Lỗi này thì sửa bằng cách
int socanh = 0;
thay vìint socanh;
. Nhưng mà không liên quan lắm…Hàm nhập hoàn toàn vô tác dụng.
Yep.
daGiac.socanh
kiểuint
,daGiac
là struct ⇨ hàm để tác độngdaGiac.socanh
phải sử dụng tham chiếu địa chỉ. Việc không sử dụng tham chiếu khiến chosocanh
luôn là một giá trị rác nào đó có sẵn trong ô nhớ chứ không phải giá trị bạn nhập vào. Nếua.socanh ≥ 100
(do bạn khai báofloat length[100];
) thì hàm sau sẽ truy cập đến một ô nhớ chưa được cấp phát cho chương trình, dẫn tới hệ điều hành ngăn chặn không cho chương trình chạy tiếp. RUN TIME ERROR!!!