Kuinka korjata 'Jump to Case Label Crosses Initialization' -virhe C++:ssa

Kuinka Korjata Jump To Case Label Crosses Initialization Virhe C Ssa



Switch-käsky on paras vaihtoehto pitkälle if-else-if-lauseelle, koska se lyhentää koodin pituutta ja tuo parempaa selkeyttä. Arvo arvioidaan switch-käskyn avulla ja sitä testataan kunkin tapausmerkinnän arvoja vastaan. Jos osuma löytyy, koodi suoritetaan ennen taukoa, muussa tapauksessa se suorittaa koodin 'oletusarvon' jälkeen.

Mikä aiheuttaa 'Jump to Case Label Crosses Initialization' -virheen C++:ssa

Switch-käskyä käytettäessä C++:ssa yleinen virhe, joka voidaan havaita, on 'Jump to Case Label Crosses Initialization'. Tämä virhe johtuu yleensä muuttujan virheellisestä määrittelystä tapaustunnisteessa. Tässä on esimerkkiohjelma, joka osoittaa 'Jump to Case Label Crosses Initialization' -virheen C++:ssa:





#include
#include
käyttäen nimiavaruutta std;
void menu_display ( ) ;
int choice_menu ( ) ;
void get_two_operands ( int & n, int & m ) ;
int add ( int n, int m ) ;
int vähennä ( int n, int m ) ;


int main ( )
{
int valinta;

tehdä
{
menu_näyttö ( ) ;
valinta = valintavalikko ( ) ;
int x, y;
vaihtaa ( valinta )
{
tapaus 1 :

get_two_operands ( x,y ) ;
int summa = lisää ( x, y ) ;
cout << x << '+' << ja << '=' << summa << endl;

tauko ;

tapaus 2 :

get_two_operands ( x,y ) ;

int ero = vähennä ( x,y ) ;
cout << x << '-' << ja << '=' << ero << endl;

tauko ;
oletus:;
}

} sillä aikaa ( valinta ! = 3 ) ;

cout << 'Ohjelma lopetettu' << endl;

palata 0 ;
}


void menu_display ( )
{
cout << endl;
cout << 'Peruslaskin' << endl;
cout << ' 1. Lisää (+)' << endl;
cout << ' 2. Vähennä (-)' << endl;
cout << '3. Poistu' << endl;

cout << endl;
}

int get_menu_choice ( )
{
int valinta;
cout << 'Virheellinen valinta Yritä uudelleen:' ;
syöminen >> valinta;

sillä aikaa ( ( ( valinta < 1 ) || ( valinta > 3 ) ) && ( ! cin.fail ( ) ) )
{
cout << ':' ;
syöminen >> valinta;
}
jos ( cin.fail ( ) )
{
cout << 'Virhe' << endl;
poistu ( 1 ) ;
}
palata valinta;
}

void get_two_operands ( int & n, int & m )
{
cout << 'Anna kaksi operandia' << endl;
cout << 'Ensimmäinen operandi:' ;
syöminen >> n;
cout << 'Toinen operandi:' ;
syöminen >> m;

}


int add ( int n, int m )
{
palata ( n + m ) ;
}

int vähennä ( int n, int m )
{
palata ( n - m ) ;
}


Kun tämä ohjelma suoritetaan, se palauttaa 'Jump to Case Label' -virheen. Tämä on käännösvirhe.



Tämä virhe ilmenee, koska muuttuja on ilmoitettu case-lauseen sisällä ilman sulkevia sulkeita. Kotelo on vain etiketti, joten sillä ei ole kykyä rajoittaa sen alle kirjoitettujen parametrien saatavuutta. Kun yllä oleva koodi suoritetaan, tapauksen 1 muuttujat ovat käytettävissä tapauksella 2, ja se näkyy alustamattomana, mikä johtaa virheisiin.







Kuinka korjata 'Jump to Case Label Crosses Initialization' -virhe C++:ssa

Tämä virhe voidaan korjata käyttämällä hakasulkuja tapauslohkon sisällä, mikä luo suljetun laajuuden ja eri tapauslohkojen parametreja ei käsitellä.

Virheenkorjattu koodi

Tämä on virheenkorjauskoodi yllä olevalle virheelle. Virhe korjataan lisäämällä tiedot tapausten alle hakasulkeisiin:



#include
#include
käyttäen nimiavaruutta std;
void menu_display ( ) ;
int choice_menu ( ) ;
void get_two_operands ( int & n, int & m ) ;
int add ( int n, int m ) ;
int vähennä ( int n, int m ) ;


int main ( )
{
int valinta;

tehdä
{
menu_näyttö ( ) ;
valinta = valintavalikko ( ) ;
int x, y;
vaihtaa ( valinta )
{
tapaus 1 :
{
get_two_operands ( x,y ) ;
int summa = lisää ( x,y ) ;
cout << x << '+' << ja << '=' << summa << endl;
}
tauko ;
tapaus 2 :
{
get_two_operands ( x, y ) ;
int ero = vähennä ( x,y ) ;
cout << x << '-' << ja << '=' << ero << endl;
}
tauko ;
oletus:;
}

} sillä aikaa ( valinta ! = 3 ) ;

cout << 'Ohjelma lopetettu' << endl;

palata 0 ;
}


void menu_display ( )
{
cout << endl;
cout << 'Peruslaskin' << endl;
cout << ' 1. Lisää (+)' << endl;
cout << ' 2. Vähennä (-)' << endl;
cout << '3. Poistu' << endl;
cout << endl;
}

int choice_menu ( )
{
int valinta;
cout << 'Valitse operaatio:' ;
syöminen >> valinta;

sillä aikaa ( ( ( valinta < 1 ) || ( valinta > 3 ) ) && ( ! cin.fail ( ) ) )
{
cout << 'Virheellinen valinta Yritä uudelleen:' ;
syöminen >> valinta;
}
jos ( cin.fail ( ) )
{
cout << 'Virhe' << endl;
poistu ( 1 ) ;
}
palata valinta;
}

void get_two_operands ( int & n, int & m )
{
cout << 'Anna kaksi operandia' << endl;
cout << 'Ensimmäinen operandi:' ;
syöminen >> n;
cout << 'Toinen operandi:' ;
syöminen >> m;

}


int add ( int n, int m )
{
palata ( n + m ) ;
}

int vähennä ( int n, int m )
{
palata ( n - m ) ;
}


Kun koodin tapauslohkoissa on käytetty sulkevia sulkuja, virhe on korjattu ja tulos näytetään:

Johtopäätös

Switch-käsky on paras vaihtoehto pitkälle if-else-if-lauseelle, koska se lyhentää koodin pituutta ja tuo parempaa selkeyttä. Switch-käskyä käytettäessä C++:ssa yleinen käännösvirhe, joka voidaan havaita, on 'Jump to Case Label Crosses Initialization'. Tämä virhe johtuu yleensä muuttujan virheellisestä määrittelystä tapaustunnisteessa. Tämä voidaan korjata käyttämällä sulkevia sulkuja datan ympärillä tapauslohkojen alla.