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 << "\n\n==================================\n\n" << endl;
	return 0;
}

:sob:Mọi người giúp em với ạ. :sob:

Hi Hello World.
Bạn thử debug chưa ?

1 Like

Đọ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

1 Like
error C4700: uninitialized local variable 'a' used

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…:thinking:

1 Like

Hàm nhập hoàn toàn vô tác dụng.

2 Likes

Yep. daGiac.socanh kiểu int, daGiac là struct ⇨ hàm để tác động daGiac.socanh phải sử dụng tham chiếu địa chỉ. Việc không sử dụng tham chiếu khiến cho socanh 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ếu a.socanh ≥ 100 (do bạn khai báo float 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!!!

float chuViDaGiac(daGiac a)
{
	float chuVi = 0;
	for (int i = 0; i <= a.socanh - 1; i++)
	{
		chuVi += a.length[0];
	}
	return chuVi;
}
1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?