כיצד לתקן את שגיאת 'Jump to Case Label Crosses Italization' ב-C++

Kyzd Ltqn T Sgy T Jump To Case Label Crosses Italization B C



הצהרת ה-switch היא החלופה הטובה ביותר להצהרת if-else-if הארוכה, מכיוון שהיא מקטינה את אורך הקוד ומביאה בהירות טובה יותר. הערך מוערך באמצעות הצהרת switch ונבדק מול הערכים של כל תווית מקרה. אם ההתאמה נמצאה, הקוד יבוצע לפני ההפסקה, אחרת, הוא מבצע את הקוד לאחר 'ברירת המחדל'.

מה גורם לשגיאת 'קפיצה לתווית מקרה חוצה אתחול' ב-C++

בזמן השימוש במשפט ה-switch, ב-C++ שגיאה נפוצה שעשויה להופיע היא 'Jump to Case Label Crosses Initialization'. שגיאה זו מופיעה בדרך כלל עקב הצהרה שגויה של משתנה בתווית המקרה. הנה תוכנית לדוגמה להדגמת השגיאה 'Jump to Case Label Crosses Initialization' ב-C++:







#include
#include
שימוש במרחב שמות std;
void menu_display ( ) ;
int choice_menu ( ) ;
void get_two_operands ( int & n, int & M ) ;
int add ( int n, int m ) ;
int לחסר ( int n, int m ) ;


int main ( )
{
בחירת int;

לַעֲשׂוֹת
{
menu_display ( ) ;
בחירה = תפריט_בחירה ( ) ;
int x, y;
החלף ( בְּחִירָה )
{
מקרה 1 :

קבל_שני_אופרנדים ( x,y ) ;
int סְכוּם = להוסיף ( x, y ) ;
cout << איקס << '+' << ו << ' = ' << סְכוּם << endl;

לשבור ;

מקרה 2 :

קבל_שני_אופרנדים ( x,y ) ;

int הבדל = לחסר ( x,y ) ;
cout << איקס << '-' << ו << ' = ' << הבדל << endl;

לשבור ;
בְּרִירַת מֶחדָל:;
}

} בזמן ( בְּחִירָה ! = 3 ) ;

cout << 'התוכנית הסתיימה' << endl;

לַחֲזוֹר 0 ;
}


void menu_display ( )
{
cout << endl;
cout << 'מחשבון בסיסי' << endl;
cout << ' 1. הוסף (+) ' << endl;
cout << ' 2. הורידו (-) ' << endl;
cout << '3. יציאה' << endl;

cout << endl;
}

int get_menu_choice ( )
{
בחירת int;
cout << 'בחירה לא חוקית נסה שוב: ' ;
אֲכִילָה >> בְּחִירָה;

בזמן ( ( ( בְּחִירָה < 1 ) || ( בְּחִירָה > 3 ) ) && ( ! cin.fail ( ) ) )
{
cout << ': ' ;
אֲכִילָה >> בְּחִירָה;
}
אם ( cin.fail ( ) )
{
cout << 'שגיאה' << endl;
יְצִיאָה ( 1 ) ;
}
לַחֲזוֹר בְּחִירָה;
}

void get_two_operands ( int & n, int & M )
{
cout << 'תן שני אופרנדים' << endl;
cout << 'אופרנד ראשון:' ;
אֲכִילָה >> n;
cout << 'אופרנד שני:' ;
אֲכִילָה >> M;

}


int add ( int n, int m )
{
לַחֲזוֹר ( n + m ) ;
}

int לחסר ( int n, int m )
{
לַחֲזוֹר ( n - מ ) ;
}


כאשר תוכנית זו מבוצעת, היא מחזירה שגיאה 'Jump to Case Label'. זוהי שגיאת קומפילציה.



שגיאה זו מופיעה בגלל ההכרזה על המשתנה בתוך הצהרת מקרה ללא הסוגריים המקיפים. המארז הוא רק תווית, ולכן אין לו את היכולת להגביל את זמינות הפרמטרים הכתובים תחתיו. כאשר הקוד לעיל מבוצע, ניתן לגשת למשתנים של מקרה 1 באמצעות מקרה 2, והוא יופיע כלא מאותחל מה שמוביל לשגיאות.







כיצד לתקן את שגיאת 'Jump to Case Label Crosses Italization' ב-C++

ניתן לתקן שגיאה זו על ידי שימוש בסוגריים בתוך בלוק המארז, מה שייצור היקף סגור והפרמטרים של בלוקי המארז השונים לא יעברו מניפולציות.

קוד ניפוי באגים

זהו קוד ניפוי באגים עבור השגיאה שלעיל. השגיאה מתוקנת על ידי צירוף הנתונים תחת מקרים בסוגריים:



#include
#include
שימוש במרחב שמות std;
void menu_display ( ) ;
int choice_menu ( ) ;
void get_two_operands ( int & n, int & M ) ;
int add ( int n, int m ) ;
int לחסר ( int n, int m ) ;


int main ( )
{
בחירת int;

לַעֲשׂוֹת
{
menu_display ( ) ;
בחירה = תפריט_בחירה ( ) ;
int x, y;
החלף ( בְּחִירָה )
{
מקרה 1 :
{
קבל_שני_אופרנדים ( x,y ) ;
int סְכוּם = להוסיף ( x, y ) ;
cout << איקס << '+' << ו << ' = ' << סְכוּם << endl;
}
לשבור ;
מקרה 2 :
{
קבל_שני_אופרנדים ( x, y ) ;
int הבדל = לחסר ( x,y ) ;
cout << איקס << '-' << ו << ' = ' << הבדל << endl;
}
לשבור ;
בְּרִירַת מֶחדָל:;
}

} בזמן ( בְּחִירָה ! = 3 ) ;

cout << 'התוכנית הסתיימה' << endl;

לַחֲזוֹר 0 ;
}


void menu_display ( )
{
cout << endl;
cout << 'מחשבון בסיסי' << endl;
cout << ' 1. הוסף (+) ' << endl;
cout << ' 2. הורידו (-) ' << endl;
cout << '3. יציאה' << endl;
cout << endl;
}

int choice_menu ( )
{
בחירת int;
cout << 'בחר את המבצע:' ;
אֲכִילָה >> בְּחִירָה;

בזמן ( ( ( בְּחִירָה < 1 ) || ( בְּחִירָה > 3 ) ) && ( ! cin.fail ( ) ) )
{
cout << 'בחירה לא חוקית נסה שוב: ' ;
אֲכִילָה >> בְּחִירָה;
}
אם ( cin.fail ( ) )
{
cout << 'שְׁגִיאָה' << endl;
יְצִיאָה ( 1 ) ;
}
לַחֲזוֹר בְּחִירָה;
}

void get_two_operands ( int & n, int & M )
{
cout << 'תן שני אופרנדים' << endl;
cout << 'אופרנד ראשון:' ;
אֲכִילָה >> n;
cout << 'אופרנד שני:' ;
אֲכִילָה >> M;

}


int add ( int n, int m )
{
לַחֲזוֹר ( n + m ) ;
}

int לחסר ( int n, int m )
{
לַחֲזוֹר ( n - מ ) ;
}


לאחר השימוש בסוגריים מקיפים בבלוק המארזים של הקוד, השגיאה תוקנה והפלט מוצג:

סיכום

הצהרת ה-switch היא החלופה הטובה ביותר להצהרת if-else-if הארוכה, מכיוון שהיא מקטינה את אורך הקוד ומביאה בהירות טובה יותר. בזמן השימוש במשפט ה-switch, ב-C++ שגיאת קומפילציה נפוצה שעשויה להופיע היא 'Jump to Case Label Crosses Initialization'. שגיאה זו מופיעה בדרך כלל עקב הצהרה שגויה של משתנה בתווית המקרה. ניתן לתקן זאת על ידי שימוש בסוגריים מקיפים מסביב לנתונים מתחת לקוביות מארז.