วิธีจัดการกับข้อยกเว้นอย่างง่ายดายใน C ++

Withi Cadkar Kab Khx Ykwen Xyang Ngayday Ni C



เหตุการณ์ที่ไม่คาดคิดที่เกิดขึ้นในขณะที่โปรแกรมกำลังทำงานเรียกว่าข้อยกเว้นหรือข้อผิดพลาด มีข้อยกเว้นเกิดขึ้นระหว่างรันไทม์ และไม่สามารถตรวจจับได้ในระหว่างการคอมไพล์ ดังนั้นอาจทำให้เกิดปัญหาร้ายแรงในโปรแกรมได้ การจัดการกับข้อยกเว้นอย่างดีในโปรแกรม C++ ถือเป็นวัตถุประสงค์หลักสำหรับโปรแกรมเมอร์เพื่อให้ได้ผลลัพธ์ที่ต้องการ

วิธีจัดการกับข้อยกเว้นอย่างง่ายดายใน C ++

การจัดการข้อยกเว้นในภาษา C++ หมายถึงกลไกในการตรวจจับข้อผิดพลาดรันไทม์และการจัดการอย่างมีประสิทธิภาพ เช่น การจัดการอินพุตที่ไม่ถูกต้อง การหารตัวเลขด้วยศูนย์ในการหาร และอื่นๆ อีกมากมาย

การจัดการข้อยกเว้นในภาษา C++ เกี่ยวข้องกับคำหลักสามคำ: พยายาม โยน และจับ คำสั่ง try อนุญาตให้ผู้ใช้กำหนดบล็อกของโค้ดที่อาจก่อให้เกิดข้อยกเว้นในโค้ด คีย์เวิร์ด Throw จะส่งข้อยกเว้นหากตรวจพบหลังจากตรวจสอบบล็อกภายใต้คีย์เวิร์ด Try คำสำคัญ catch มีบล็อกของโค้ดที่สามารถจัดการข้อยกเว้นที่พบในบล็อก try







ตัวอย่างที่ 1: การจัดการข้อยกเว้นระหว่างการแบ่ง

รหัสถูกเขียนขึ้นเพื่อตรวจสอบข้อยกเว้นระหว่างการแบ่ง



#รวม
โดยใช้ เนมสเปซ มาตรฐาน ;

ภายใน หลัก ( ) {

สองเท่า ตัวเศษ, ตัวส่วน, การหาร ;

ศาล << 'ป้อนค่าตัวเศษ:' ;
การกิน >> เศษ ;

ศาล <> ตัวส่วน ;

พยายาม {


ถ้า ( ตัวส่วน == 0 )
โยน 0 ;


แผนก = เศษ / ตัวส่วน ;
ศาล << เศษ << '/' << ตัวส่วน << ' = ' << แผนก << สิ้นสุด ;
}

จับ ( ภายใน num_ข้อยกเว้น ) {
ศาล << 'ผิดพลาด! ตัวหารไม่สามารถเป็น  ' << num_ข้อยกเว้น << สิ้นสุด ;
}

กลับ 0 ;
}

ในโปรแกรมนี้ ผู้ใช้ป้อนค่าของตัวเศษและตัวส่วนที่ประกาศไว้ในส่วน main() ในบล็อก try จะใช้คำสั่ง if เพื่อตรวจสอบข้อยกเว้นว่าตัวส่วนเป็นศูนย์หรือไม่ เนื่องจากการหารไม่สามารถดำเนินการด้วยตัวหารศูนย์ได้หากพบว่าตัวส่วนเป็น 0 การหารจะเกิดข้อยกเว้นและบล็อก catch จะส่งกลับอาร์กิวเมนต์ข้อผิดพลาด มิฉะนั้นจะดำเนินการหารแบบง่าย







ผู้ใช้ป้อนตัวเศษ 42 และ 0 ในตัวส่วน ซึ่งส่งข้อยกเว้น ดังนั้นโปรแกรมจึงส่งคืนอาร์กิวเมนต์ข้อผิดพลาด



ผู้ใช้ป้อนเศษ 42 และ 2 เป็นตัวส่วน เนื่องจากไม่พบข้อยกเว้น ผลลัพธ์ที่ได้หลังจากการหารกลับคืนมา

ตัวอย่างที่ 2 การจัดการข้อยกเว้นในการตรวจสอบอายุ

โปรแกรมนี้ตรวจสอบข้อยกเว้นตามอายุของผู้ใช้

#รวม
โดยใช้ เนมสเปซ มาตรฐาน ;

/*
ในที่นี้ เราต้องการทิ้งข้อยกเว้น (อายุเป็นข้อยกเว้น) หากอายุของบุคคลนั้นน้อยกว่า 18 ปี
*/

ภายใน หลัก ( )
{
// ตรวจสอบว่าอายุเกิน 18 หรือไม่ในการลองบล็อก
พยายาม
{
ภายใน อายุ ;
ศาล << 'ป้อนอายุของคุณเพื่อเข้าถึง:' ;
การกิน >> อายุ ;

ถ้า ( อายุ >= 18 )
{
ศาล << 'ได้รับสิทธิ์การเข้าถึงแล้ว' ;
}
// มีข้อยกเว้นแบบกำหนดเองหากอายุต่ำกว่า 18 ปี
อื่น
{
โยน ( อายุ ) ;
}
}
// จับข้อยกเว้นที่เกิดขึ้นและแสดงผลลัพธ์ที่ต้องการ (ปฏิเสธการเข้าถึง!)
จับ ( ภายใน x )
{
ศาล << 'การเข้าถึงถูกปฏิเสธ! คุณยังไม่บรรลุนิติภาวะ' << สิ้นสุด ;
}
กลับ 0 ;
}

ในโปรแกรมนี้ จะมีการกำหนดตัวแปรที่มีค่าจำนวนเต็ม ผู้ใช้จะถูกขอให้ป้อนอายุและลองบล็อกตรวจสอบว่าอายุของผู้ใช้มากกว่าหรือเท่ากับ 18 หรือไม่ หากไม่เป็นความจริง ระบบจะส่งข้อยกเว้น และบล็อกข้อยกเว้นจะส่งคืน Access ถูกปฏิเสธ! การโต้แย้ง. มิฉะนั้นจะได้รับอนุญาตให้เข้าถึงได้

ผู้ใช้ป้อนอายุเป็น 12 เพื่อตรวจสอบสิทธิ์การเข้าถึง เนื่องจากอายุนี้ต่ำกว่า 18 ปี ดังนั้นอาร์กิวเมนต์ปฏิเสธการเข้าถึงจึงถูกส่งกลับ

ผู้ใช้ป้อนอายุ 20 เนื่องจากอายุมากกว่า 18 ปี ดังนั้นจึงให้สิทธิ์การเข้าถึงแก่ผู้ใช้

บันทึก : หากไม่มี catch block ในโปรแกรม โปรแกรมจะทำงานผิดปกติและยุติการทำงานอย่างไม่คาดคิดในกรณีที่มีข้อยกเว้น

บทสรุป

การจัดการข้อยกเว้นในภาษา C++ หมายถึงกลไกของการตรวจจับข้อผิดพลาดรันไทม์และการจัดการอย่างมีประสิทธิภาพ ประกอบด้วยคำสำคัญสามคำคือ try, Throw และ catch มีการตรวจสอบข้อยกเว้นสำหรับโค้ดในบล็อก try คีย์เวิร์ด Throw จะส่งข้อยกเว้นหากพบ และบล็อก catch จะจัดการข้อยกเว้นที่เกิดขึ้นสำหรับบล็อก Try การจัดการข้อยกเว้นทำให้ประสบการณ์ผู้ใช้ราบรื่นและยอดเยี่ยมโดยหลีกเลี่ยงข้อผิดพลาดรันไทม์