كيفية إصلاح خطأ 'الانتقال إلى تهيئة تقاطعات تسمية الحالة' في لغة C++

Kyfyt Aslah Khta Alantqal Aly Thyyt Tqat At Tsmyt Alhalt Fy Lght C



تعد عبارة التبديل أفضل بديل لعبارة if-else-if الطويلة، لأنها تقلل من طول الكود وتوفر وضوحًا أفضل. يتم تقييم القيمة باستخدام بيان التبديل ويتم اختبارها مقابل قيم كل تسمية حالة. إذا تم العثور على التطابق، فسيتم تنفيذ الكود قبل الفاصل، وإلا فسيتم تنفيذ الكود بعد 'الافتراضي'.

ما الذي يسبب خطأ 'الانتقال إلى تهيئة تقاطعات تسمية الحالة' في C++

أثناء استخدام عبارة التبديل، في لغة C++، هناك خطأ شائع يمكن ملاحظته وهو 'الانتقال إلى تهيئة تقاطعات تسمية الحالة'. يظهر هذا الخطأ عادةً بسبب الإعلان غير الصحيح للمتغير ضمن تسمية الحالة. فيما يلي مثال لبرنامج يوضح الخطأ 'الانتقال إلى تهيئة تقاطعات تسمية الحالة' في لغة C++:







#تشمل
#تشمل
استخدام اسم للمحطة؛
عرض القائمة باطلة ( ) ;
int Choice_menu ( ) ;
get_two_operands باطلة ( كثافة العمليات & ن، كثافة العمليات & م ) ;
إضافة كثافة العمليات ( كثافة العمليات ن، كثافة العمليات م ) ;
كثافة العمليات طرح ( كثافة العمليات ن، كثافة العمليات م ) ;


انت مين ( )
{
اختيار كثافة العمليات؛

يفعل
{
Menu_display ( ) ;
التحديد = Choice_menu ( ) ;
كثافة العمليات س، ص؛
يُحوّل ( اختيار )
{
قضية 1 :

get_two_operands ( س، ص ) ;
كثافة العمليات مجموع = إضافة ( س، ص ) ;
cout << س << '+' << و << ' = ' << مجموع << نهاية؛

استراحة ;

قضية 2 :

get_two_operands ( س، ص ) ;

كثافة العمليات فرق = طرح ( س، ص ) ;
cout << س << '-' << و << ' = ' << فرق << نهاية؛

استراحة ;
تقصير:؛
}

} بينما ( اختيار ! = 3 ) ;

cout << 'تم إنهاء البرنامج' << نهاية؛

يعود 0 ;
}


عرض القائمة باطلة ( )
{
cout << نهاية؛
cout << 'الآلة الحاسبة الأساسية' << نهاية؛
cout << ' 1. أضف (+) ' << نهاية؛
cout << ' 2. اطرح (-) ' << نهاية؛
cout << '3. خروج' << نهاية؛

cout << نهاية؛
}

int get_menu_choice ( )
{
اختيار كثافة العمليات؛
cout << 'اختيار غير صالح حاول مرة أخرى:' ;
يتناول الطعام >> اختيار؛

بينما ( ( ( اختيار < 1 ) || ( اختيار > 3 ) ) && ( ! سين. فشل ( ) ) )
{
cout << ': ' ;
يتناول الطعام >> اختيار؛
}
لو ( سين. فشل ( ) )
{
cout << 'خطأ ' << نهاية؛
مخرج ( 1 ) ;
}
يعود اختيار؛
}

get_two_operands باطلة ( كثافة العمليات & ن، كثافة العمليات & م )
{
cout << 'أعط اثنين من المعاملات' << نهاية؛
cout << 'العامل الأول:' ;
يتناول الطعام >> ن؛
cout << 'العامل الثاني :' ;
يتناول الطعام >> م؛

}


إضافة كثافة العمليات ( كثافة العمليات ن، كثافة العمليات م )
{
يعود ( ن + م ) ;
}

كثافة العمليات طرح ( كثافة العمليات ن، كثافة العمليات م )
{
يعود ( ن - م ) ;
}


عند تنفيذ هذا البرنامج، فإنه يُرجع خطأ 'الانتقال إلى تسمية الحالة'. هذا خطأ في التجميع.



يظهر هذا الخطأ بسبب الإعلان عن المتغير داخل بيان الحالة بدون الأقواس المضمنة. الحالة هي مجرد تسمية، لذلك ليس لديها القدرة على تقييد توفر المعلمات المكتوبة تحتها. عند تنفيذ التعليمات البرمجية أعلاه، يمكن الوصول إلى متغيرات الحالة 1 عن طريق الحالة 2، وسوف تظهر على أنها غير مهيأة مما يؤدي إلى حدوث أخطاء.







كيفية إصلاح خطأ 'الانتقال إلى تهيئة تقاطعات تسمية الحالة' في لغة C++

يمكن إصلاح هذا الخطأ باستخدام أقواس داخل كتلة الحالة، مما سيؤدي إلى إنشاء نطاق مغلق ولن يتم التلاعب بمعلمات كتل الحالة المختلفة.

رمز مصحح

هذا هو الكود الذي تم تصحيحه للخطأ أعلاه. تم إصلاح الخطأ عن طريق وضع البيانات تحت الحالات بين قوسين:



#تشمل
#تشمل
استخدام اسم للمحطة؛
عرض القائمة باطلة ( ) ;
int Choice_menu ( ) ;
get_two_operands باطلة ( كثافة العمليات & ن، كثافة العمليات & م ) ;
إضافة كثافة العمليات ( كثافة العمليات ن، كثافة العمليات م ) ;
كثافة العمليات طرح ( كثافة العمليات ن، كثافة العمليات م ) ;


انت مين ( )
{
اختيار كثافة العمليات؛

يفعل
{
Menu_display ( ) ;
التحديد = Choice_menu ( ) ;
كثافة العمليات س، ص؛
يُحوّل ( اختيار )
{
قضية 1 :
{
get_two_operands ( س، ص ) ;
كثافة العمليات مجموع = إضافة ( س، ص ) ;
cout << س << '+' << و << ' = ' << مجموع << نهاية؛
}
استراحة ;
قضية 2 :
{
get_two_operands ( س، ص ) ;
كثافة العمليات فرق = طرح ( س، ص ) ;
cout << س << '-' << و << ' = ' << فرق << نهاية؛
}
استراحة ;
تقصير:؛
}

} بينما ( اختيار ! = 3 ) ;

cout << 'تم إنهاء البرنامج' << نهاية؛

يعود 0 ;
}


عرض القائمة باطلة ( )
{
cout << نهاية؛
cout << 'الآلة الحاسبة الأساسية' << نهاية؛
cout << ' 1. أضف (+) ' << نهاية؛
cout << ' 2. اطرح (-) ' << نهاية؛
cout << '3. خروج' << نهاية؛
cout << نهاية؛
}

int Choice_menu ( )
{
اختيار كثافة العمليات؛
cout << 'اختر العملية:' ;
يتناول الطعام >> اختيار؛

بينما ( ( ( اختيار < 1 ) || ( اختيار > 3 ) ) && ( ! سين. فشل ( ) ) )
{
cout << 'اختيار غير صالح حاول مرة أخرى:' ;
يتناول الطعام >> اختيار؛
}
لو ( سين. فشل ( ) )
{
cout << 'خطأ' << نهاية؛
مخرج ( 1 ) ;
}
يعود اختيار؛
}

get_two_operands باطلة ( كثافة العمليات & ن، كثافة العمليات & م )
{
cout << 'أعط اثنين من المعاملات' << نهاية؛
cout << 'العامل الأول:' ;
يتناول الطعام >> ن؛
cout << 'العامل الثاني :' ;
يتناول الطعام >> م؛

}


إضافة كثافة العمليات ( كثافة العمليات ن، كثافة العمليات م )
{
يعود ( ن + م ) ;
}

كثافة العمليات طرح ( كثافة العمليات ن، كثافة العمليات م )
{
يعود ( ن - م ) ;
}


بعد استخدام الأقواس المضمنة في كتل الحالة الخاصة بالكود، تم إصلاح الخطأ ويتم عرض الإخراج:

خاتمة

تعد عبارة التبديل أفضل بديل لعبارة if-else-if الطويلة، لأنها تقلل من طول الكود وتضفي وضوحًا أفضل. أثناء استخدام عبارة التبديل، في لغة C++، هناك خطأ شائع في الترجمة يمكن ملاحظته وهو 'الانتقال إلى تهيئة تقاطعات تسمية الحالة'. يظهر هذا الخطأ عادةً بسبب الإعلان غير الصحيح للمتغير ضمن تسمية الحالة. يمكن إصلاح ذلك باستخدام الأقواس المضمنة حول البيانات ضمن كتل الحالة.