Kuidas parandada C++-s viga „Jump to Case Label Crosses Initialization”.

Kuidas Parandada C S Viga Jump To Case Label Crosses Initialization



Switch-lause on parim alternatiiv pikale if-else-if-lausele, kuna see vähendab koodi pikkust ja toob parema selguse. Väärtust hinnatakse lüliti lause abil ja seda testitakse iga juhtumisildi väärtustega. Kui sobivus leitakse, käivitub kood enne pausi, vastasel juhul käivitab see koodi pärast vaikimisi.

Mis põhjustab C++-s vea „Jump to Case Label Crosses Initialization”?

Switch-lause kasutamisel on C++ puhul tavaline viga, mida võib täheldada „Jump to Case Label Crosses Initialization”. See tõrge ilmneb tavaliselt juhtude sildil oleva muutuja vale deklareerimise tõttu. Siin on näidisprogramm, mis näitab C++ tõrke „Jump to Case Label Crosses Initialization” (Jump to Case Label Crosses Initialization) tõrget:







#include
#include
kasutades nimeruumi std;
tühine menüü_kuva ( ) ;
int valik_menüü ( ) ;
tühine get_two_operands ( int & n, int & m ) ;
int lisada ( int n, int m ) ;
int lahutada ( int n, int m ) ;


int main ( )
{
int valik;

teha
{
menüü_kuva ( ) ;
valik = valik_menüü ( ) ;
int x, y;
lüliti ( valik )
{
juhtum 1 :

hanki_kaks_operandi ( x, y ) ;
int summa = lisa ( x, y ) ;
cout << x << '+' << ja << '=' << summa << endl;

murda ;

juhtum 2 :

hanki_kaks_operandi ( x,y ) ;

int diff = lahutada ( x,y ) ;
cout << x << '-' << ja << '=' << diff << endl;

murda ;
vaikimisi:;
}

} samal ajal ( valik ! = 3 ) ;

cout << 'Programm lõpetatud' << endl;

tagasi 0 ;
}


tühine menüü_kuva ( )
{
cout << endl;
cout << 'Põhikalkulaator' << endl;
cout << ' 1. Lisa (+) ' << endl;
cout << ' 2. Lahutage (-) ' << endl;
cout << '3. Välju' << endl;

cout << endl;
}

int get_menu_choice ( )
{
int valik;
cout << 'Kehtetu valik Proovi uuesti:' ;
söömine >> valik;

samal ajal ( ( ( valik < 1 ) || ( valik > 3 ) ) && ( ! cin.fail ( ) ) )
{
cout << ':' ;
söömine >> valik;
}
kui ( cin.fail ( ) )
{
cout << 'Viga' << endl;
väljuda ( 1 ) ;
}
tagasi valik;
}

tühine get_two_operands ( int & n, int & m )
{
cout << 'Anna kaks operandi' << endl;
cout << 'Esimene operand:' ;
söömine >> n;
cout << 'Teine operand:' ;
söömine >> m;

}


int lisada ( int n, int m )
{
tagasi ( n + m ) ;
}

int lahutada ( int n, int m )
{
tagasi ( n - m ) ;
}


Kui see programm käivitatakse, tagastab see veateate „Jump to Case Label”. See on kompileerimisviga.



See tõrge ilmneb muutuja deklareerimise tõttu juhtulause sees ilma sulgevate sulgudeta. Korpus on lihtsalt silt, seega ei ole sellel võimalust piirata selle alla kirjutatud parameetrite kättesaadavust. Kui ülaltoodud kood on käivitatud, pääseb juhtum 2 juurde juhtumi 1 muutujatele ja see kuvatakse initsialiseerimata, mis põhjustab vigu.







Kuidas parandada C++-s viga „Jump to Case Label Crosses Initialization”.

Selle vea saab parandada juhtumiploki sees olevate sulgude abil, mis loob suletud ulatuse ja erinevate juhtumiplokkide parameetritega ei manipuleerita.

Silutud kood

See on ülaltoodud vea silumiskood. Viga parandatakse, lisades andmed juhtumite alla sulgudesse:



#include
#include
kasutades nimeruumi std;
tühine menüü_kuva ( ) ;
int valik_menüü ( ) ;
tühine get_two_operands ( int & n, int & m ) ;
int lisada ( int n, int m ) ;
int lahutada ( int n, int m ) ;


int main ( )
{
int valik;

teha
{
menüü_kuva ( ) ;
valik = valik_menüü ( ) ;
int x, y;
lüliti ( valik )
{
juhtum 1 :
{
hanki_kaks_operandi ( x,y ) ;
int summa = lisa ( x,y ) ;
cout << x << '+' << ja << '=' << summa << endl;
}
murda ;
juhtum 2 :
{
hanki_kaks_operandi ( x,y ) ;
int diff = lahutada ( x,y ) ;
cout << x << '-' << ja << '=' << diff << endl;
}
murda ;
vaikimisi:;
}

} samal ajal ( valik ! = 3 ) ;

cout << 'Programm lõpetatud' << endl;

tagasi 0 ;
}


tühine menüü_kuva ( )
{
cout << endl;
cout << 'Põhikalkulaator' << endl;
cout << ' 1. Lisa (+) ' << endl;
cout << ' 2. Lahutage (-) ' << endl;
cout << '3. Välju' << endl;
cout << endl;
}

int valik_menüü ( )
{
int valik;
cout << 'Valige operatsioon:' ;
söömine >> valik;

samal ajal ( ( ( valik < 1 ) || ( valik > 3 ) ) && ( ! cin.fail ( ) ) )
{
cout << 'Kehtetu valik Proovi uuesti:' ;
söömine >> valik;
}
kui ( cin.fail ( ) )
{
cout << 'Viga' << endl;
väljuda ( 1 ) ;
}
tagasi valik;
}

tühine get_two_operands ( int & n, int & m )
{
cout << 'Anna kaks operandi' << endl;
cout << 'Esimene operand:' ;
söömine >> n;
cout << 'Teine operand:' ;
söömine >> m;

}


int lisada ( int n, int m )
{
tagasi ( n + m ) ;
}

int lahutada ( int n, int m )
{
tagasi ( n - m ) ;
}


Pärast ümbritsevate sulgude kasutamist koodi suurjuhtude plokkides on viga parandatud ja kuvatakse väljund:

Järeldus

Switch-lause on parim alternatiiv pikale if-else-if-lausele, kuna see vähendab koodi pikkust ja toob parema selguse. Switchi avalduse kasutamisel on C++ puhul tavaline kompileerimisviga, mida võib täheldada „Jump to Case Label Crosses Initialization”. See tõrge ilmneb tavaliselt juhtude sildil oleva muutuja vale deklareerimise tõttu. Seda saab parandada, kasutades tähtedeplokkide all olevaid andmeid ümbritsevaid sulgusid.