Hur man åtgärdar felet 'Hoppa till ärendeetikett korsar initiering' i C++

Hur Man Atgardar Felet Hoppa Till Arendeetikett Korsar Initiering I C



Switch-satsen är det bästa alternativet för den långa if-else-if-satsen, eftersom den minskar längden på koden och ger bättre klarhet. Värdet utvärderas med switch-satsen och testas mot värdena för varje falletikett. Om matchningen hittas körs koden före pausen, annars kör den koden efter 'standard'.

Vad som orsakar felet 'Jump to Case Label Crosses Initialization' i C++

När du använder switch-satsen, i C++ är ett vanligt fel som kan observeras 'Jump to Case Label Crosses Initialization'. Detta fel uppstår vanligtvis på grund av felaktig deklaration av en variabel i case-etiketten. Här är ett exempelprogram för att demonstrera felet 'Jump to Case Label Crosses Initialization' i C++:







#include
#inkludera
använder namnutrymme std;
void menu_display ( ) ;
int choice_menu ( ) ;
ogiltig get_two_operander ( int & n, int & m ) ;
int add ( int n, int m ) ;
int subtrahera ( int n, int m ) ;


int main ( )
{
int urval;

do
{
menu_display ( ) ;
urval = val_meny ( ) ;
int x, y;
växla ( urval )
{
fall 1 :

få_två_operander ( x,y ) ;
int belopp = lägga till ( x,y ) ;
cout << x << '+' << och << ' = ' << belopp << endl;

ha sönder ;

fall 2 :

få_två_operander ( x,y ) ;

int diff = subtrahera ( x,y ) ;
cout << x << '-' << och << ' = ' << diff << endl;

ha sönder ;
standard:;
}

} medan ( urval ! = 3 ) ;

cout << 'Program avslutat' << endl;

lämna tillbaka 0 ;
}


void menu_display ( )
{
cout << endl;
cout << 'Grundläggande kalkylator' << endl;
cout << ' 1. Lägg till (+) ' << endl;
cout << ' 2. Subtrahera (-) ' << endl;
cout << '3. Avsluta' << endl;

cout << endl;
}

int get_menu_choice ( )
{
int val;
cout << 'Ogiltigt val försök igen:' ;
äter >> urval;

medan ( ( ( urval < 1 ) || ( urval > 3 ) ) && ( ! cin.fail ( ) ) )
{
cout << ': ' ;
äter >> urval;
}
om ( cin.fail ( ) )
{
cout << 'Fel' << endl;
utgång ( 1 ) ;
}
lämna tillbaka urval;
}

ogiltig get_two_operander ( int & n, int & m )
{
cout << 'Ge två operander' << endl;
cout << 'Första operand: ' ;
äter >> n;
cout << 'Andra Operand: ' ;
äter >> m;

}


int add ( int n, int m )
{
lämna tillbaka ( n + m ) ;
}

int subtrahera ( int n, int m )
{
lämna tillbaka ( n - m ) ;
}


När detta program körs returnerar det ett 'Hoppa till ärendeetikett'-fel. Detta är ett kompileringsfel.



Det här felet uppstår på grund av deklarationen av variabeln i en case-sats utan de omslutande parenteserna. Fodralet är bara en etikett, så det har inte möjlighet att begränsa tillgängligheten för parametrarna som skrivits under det. När ovanstående kod exekveras kan variablerna i fall 1 nås av fall 2, och den kommer att visas som oinitierad vilket leder till fel.







Hur man åtgärdar felet 'Hoppa till ärendeetikett korsar initiering' i C++

Detta fel kan åtgärdas genom att använda parenteser inuti case-blocket, vilket kommer att skapa en innesluten räckvidd och parametrarna för de olika case-blocken kommer inte att manipuleras.

Avlusad kod

Detta är den felsökta koden för ovanstående fel. Felet åtgärdas genom att infoga data under fall inom parentes:



#include
#inkludera
använder namnutrymme std;
void menu_display ( ) ;
int choice_menu ( ) ;
ogiltig get_two_operander ( int & n, int & m ) ;
int add ( int n, int m ) ;
int subtrahera ( int n, int m ) ;


int main ( )
{
int urval;

do
{
menu_display ( ) ;
urval = val_meny ( ) ;
int x, y;
växla ( urval )
{
fall 1 :
{
få_två_operander ( x, y ) ;
int belopp = lägga till ( x,y ) ;
cout << x << '+' << och << ' = ' << belopp << endl;
}
ha sönder ;
fall 2 :
{
få_två_operander ( x, y ) ;
int diff = subtrahera ( x,y ) ;
cout << x << '-' << och << ' = ' << diff << endl;
}
ha sönder ;
standard:;
}

} medan ( urval ! = 3 ) ;

cout << 'Program avslutat' << endl;

lämna tillbaka 0 ;
}


void menu_display ( )
{
cout << endl;
cout << 'Grundläggande kalkylator' << endl;
cout << ' 1. Lägg till (+) ' << endl;
cout << ' 2. Subtrahera (-) ' << endl;
cout << '3. Avsluta' << endl;
cout << endl;
}

int choice_menu ( )
{
int urval;
cout << 'Välj operationen:' ;
äter >> urval;

medan ( ( ( urval < 1 ) || ( urval > 3 ) ) && ( ! cin.fail ( ) ) )
{
cout << 'Ogiltigt val försök igen:' ;
äter >> urval;
}
om ( cin.fail ( ) )
{
cout << 'Fel' << endl;
utgång ( 1 ) ;
}
lämna tillbaka urval;
}

ogiltig get_two_operander ( int & n, int & m )
{
cout << 'Ge två operander' << endl;
cout << 'Första operand: ' ;
äter >> n;
cout << 'Andra Operand: ' ;
äter >> m;

}


int add ( int n, int m )
{
lämna tillbaka ( n + m ) ;
}

int subtrahera ( int n, int m )
{
lämna tillbaka ( n - m ) ;
}


Efter användning av omslutande parenteser i kodens fallblock har felet åtgärdats och utgången visas:

Slutsats

Switch-satsen är det bästa alternativet för den långa if-else-if-satsen, eftersom den minskar längden på koden och ger bättre klarhet. När du använder switch-satsen, i C++ är ett vanligt kompileringsfel som kan observeras 'Jump to Case Label Crosses Initialization'. Detta fel uppstår vanligtvis på grund av felaktig deklaration av en variabel i case-etiketten. Detta kan åtgärdas genom att använda omslutande parenteser runt data under fallblock.