Cách thoát chương trình từ 1 hàm trong C/C++

Đây là một ví dụ giả sử của em: ( Tại em không biết diễn đạt bằng lời nói như thế nào nên viết ví dụ cho mọi người dễ hiểu)

struct SinhVien X
{
.......;
};
.......
SinhVien Ten_Hàm (SinhVien X)
{
if( điều kiện)
{ //sai thì thoát khỏi chương trình 
return; (?) 
}
....;
return X;
}

Cái phần (?) đó là return trở về gì để có thể thoát ra khỏi chương trình vậy mọi người ?Em thử để return NULL và return 0 thì nó bảo đây là kiểu dùng của int nên không cho. Em để return như vậy thôi thì không biết đúng không ! Nếu sai em nên sửa lại như thế nào cho đúng!

exit(<mã lỗi>) 0 là thành công.
Thường lỗi nặng mới kick hẳn ra thôi.

5 Likes

Câu trả lời của @rogp10 là chính xác rồi, tớ chỉ chi tiết hóa nó bằng code, vì cậu có vẻ mới và là người detail-oriented :smile:

#include <stdlib.h>

struct SinhVien X
{
	// ...
};

SinhVien Ten_Hàm (SinhVien X)
{
	if(/*condition*/)
	{
		// Khi điều kiện bị vi phạm, sử dụng hàm `exit` với status để thoát khỏi chương trình
		// status 1 (khác 0 in general): trạng thái lỗi cho trường hợp của cậu - do cậu quyết định
		// status 0: thoát chương trình trong trường hợp thành công
		exit(1);
	}
	
	// Giờ cậu có thể múa với nhau ở đây
	return X;
}

Reference: http://www.cplusplus.com/reference/cstdlib/exit/

4 Likes

Vì hồi đó mình có một thời tìm hiểu sự khác nhau giữa return 0 và exit(0) đó bạn. Thì mình thấy nó để là nếu dùng exit(0) nó sẽ end program luôn nên mình nghĩ không dùng được chứ! Để mình thử xem !

Bạn có thấy tự chính mình mâu thuẫn không?

5 Likes

Gặp return thì nó sẽ thoát. Còn return cái gì là phụ thuộc vào cái hàm chứa return nó khai báo kiểu gì thì return ra kiểu đó hoặc kiểu dữ liệu có thể chuyển sang kiểu đó.

Nếu khai báo void thì chỉ cần return;
Nếu khai báo int thì return một số int, có thể ruturn char vì char có thể chuyển sang int.
Nếu khai báo bool thì sẽ return ra true hoặc false, cũng có thể return ra con số nào đó vì có thể coi 0 = false, #0 = true.

2 Likes

Ý mình là một vài tài liệu mình đọc nó bảo return là thoát ra khỏi cái hàm đó thôi đó bạn nhưng vẫn tiếp tục chạy tiếp. Còn exit là end luôn đó!

Tớ sẽ đi thẳng vào vấn đề.

Ở câu hỏi của cậu:

Tớ và mọi người đều hiểu cậu cần thoát chương trình ở đây :smiley:

Còn câu dưới đây của cậu, và cậu Stanley có đề cập:

Bọn tớ hiểu là cậu đã biết hàm exit rồi, nhưng cậu phủ nhận nó có thể giúp cậu giải quyết vấn đề ở trên.
Đó là lý do Stanley và tớ nghĩ cậu đang mâu thuẫn với chính mình.

Giờ tớ sẽ hỏi cậu, chính xác thì cậu cần gì? Cậu cần kết thúc hàm, hay cậu cần kết thúc chương trình? :smile:

6 Likes

Em nghĩ có lẽ là dùng return để kết thúc chương trình từ 1 hàm do có cái này.

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?