Kā labot kļūdu “Pārlēkt uz Case Label Crosses Initialization” programmā C++

Ka Labot Kludu Parlekt Uz Case Label Crosses Initialization Programma C



Slēdža paziņojums ir labākā alternatīva garajam if-else-if priekšrakstam, jo ​​tas samazina koda garumu un nodrošina lielāku skaidrību. Vērtība tiek novērtēta, izmantojot slēdzi, un tiek pārbaudīta, salīdzinot ar katra gadījuma etiķetes vērtībām. Ja atbilstība tiek atrasta, kods tiek izpildīts pirms pārtraukuma, pretējā gadījumā tas izpilda kodu pēc “noklusējuma”.

Kas izraisa kļūdu “Pārlēkt uz gadījuma etiķetes šķērso inicializāciju” programmā C++

Lietojot slēdža priekšrakstu, C++ valodā izplatīta kļūda, ko var novērot, ir “Pārlēkt uz Case Label Crosses Initialization”. Šī kļūda parasti parādās nepareizas mainīgā deklarācijas dēļ gadījuma etiķetē. Šeit ir programmas piemērs, lai parādītu kļūdu “Pārlēkt uz Case Label Crosses Initialization” programmā C++:







#include
#include
izmantojot namespace std;
nederīgs izvēlnes_displejs ( ) ;
int izvēles_izvēlne ( ) ;
nederīgs get_two_operands ( starpt & n, starpt & m ) ;
int pievienot ( int n, int m ) ;
int atņemt ( int n, int m ) ;


int galvenais ( )
{
int atlase;

darīt
{
menu_displejs ( ) ;
atlase = izvēles_izvēlne ( ) ;
int x, y;
slēdzis ( atlase )
{
lietu 1 :

get_two_operands ( x, y ) ;
starpt summa = pievienot ( x,y ) ;
cout << x << '+' << un << '=' << summa << endl;

pārtraukums ;

lietu 2 :

get_two_operands ( x,y ) ;

starpt atšķir = atņemt ( x,y ) ;
cout << x << '-' << un << '=' << atšķir << endl;

pārtraukums ;
noklusējuma:;
}

} kamēr ( atlase ! = 3 ) ;

cout << 'Programma pārtraukta' << endl;

atgriezties 0 ;
}


nederīgs izvēlnes_displejs ( )
{
cout << endl;
cout << 'Pamata kalkulators' << endl;
cout << '1. Pievienot (+)' << endl;
cout << ' 2. Atņemiet (-) ' << endl;
cout << '3. Iziet' << endl;

cout << endl;
}

int get_menu_choice ( )
{
int izvēle;
cout << 'Nederīga izvēle Mēģiniet vēlreiz:' ;
ēšana >> atlase;

kamēr ( ( ( atlase < 1 ) || ( atlase > 3 ) ) && ( ! cin.fail ( ) ) )
{
cout << ':' ;
ēšana >> atlase;
}
ja ( cin.fail ( ) )
{
cout << 'Kļūda' << endl;
Izeja ( 1 ) ;
}
atgriezties atlase;
}

nederīgs get_two_operands ( starpt & n, starpt & m )
{
cout << 'Dodiet divus operandus' << endl;
cout << 'Pirmais operands:' ;
ēšana >> n;
cout << 'Otrais operands:' ;
ēšana >> m;

}


int pievienot ( int n, int m )
{
atgriezties ( n + m ) ;
}

int atņemt ( int n, int m )
{
atgriezties ( n - m ) ;
}


Kad šī programma tiek izpildīta, tā atgriež kļūdu “Pārlēkt uz gadījuma etiķeti”. Tā ir kompilācijas kļūda.



Šī kļūda parādās mainīgā deklarācijas dēļ gadījuma paziņojumā bez iekavām. Korpuss ir tikai etiķete, tāpēc tai nav iespēju ierobežot zem tā rakstīto parametru pieejamību. Kad iepriekš minētais kods ir izpildīts, 1. gadījuma mainīgajiem var piekļūt 2. gadījums, un tas parādīsies kā neinicializēts, radot kļūdas.







Kā labot kļūdu “Pārlēkt uz Case Label Crosses Initialization” programmā C++

Šo kļūdu var novērst, gadījuma blokā izmantojot iekavas, kas izveidos slēgtu tvērumu un netiks manipulēti ar dažādu gadījuma bloku parametriem.

Atkļūdots kods

Šis ir iepriekš minētās kļūdas atkļūdošanas kods. Kļūda tiek novērsta, ievietojot datus zem gadījumiem iekavās:



#include
#include
izmantojot namespace std;
nederīgs izvēlnes_displejs ( ) ;
int izvēles_izvēlne ( ) ;
nederīgs get_two_operands ( starpt & n, starpt & m ) ;
int pievienot ( int n, int m ) ;
int atņemt ( int n, int m ) ;


int galvenais ( )
{
int atlase;

darīt
{
menu_displejs ( ) ;
atlase = izvēles_izvēlne ( ) ;
int x, y;
slēdzis ( atlase )
{
lietu 1 :
{
get_two_operands ( x,y ) ;
starpt summa = pievienot ( x,y ) ;
cout << x << '+' << un << '=' << summa << endl;
}
pārtraukums ;
lietu 2 :
{
get_two_operands ( x,y ) ;
starpt atšķir = atņemt ( x,y ) ;
cout << x << '-' << un << '=' << atšķir << endl;
}
pārtraukums ;
noklusējuma:;
}

} kamēr ( atlase ! = 3 ) ;

cout << 'Programma pārtraukta' << endl;

atgriezties 0 ;
}


nederīgs izvēlnes_displejs ( )
{
cout << endl;
cout << 'Pamata kalkulators' << endl;
cout << '1. Pievienot (+)' << endl;
cout << ' 2. Atņemiet (-) ' << endl;
cout << '3. Iziet' << endl;
cout << endl;
}

int izvēles_izvēlne ( )
{
int atlase;
cout << 'Izvēlieties operāciju:' ;
ēšana >> atlase;

kamēr ( ( ( atlase < 1 ) || ( atlase > 3 ) ) && ( ! cin.fail ( ) ) )
{
cout << 'Nederīga izvēle Mēģiniet vēlreiz:' ;
ēšana >> atlase;
}
ja ( cin.fail ( ) )
{
cout << 'Kļūda' << endl;
Izeja ( 1 ) ;
}
atgriezties atlase;
}

nederīgs get_two_operands ( starpt & n, starpt & m )
{
cout << 'Dodiet divus operandus' << endl;
cout << 'Pirmais operands:' ;
ēšana >> n;
cout << 'Otrais operands:' ;
ēšana >> m;

}


int pievienot ( int n, int m )
{
atgriezties ( n + m ) ;
}

int atņemt ( int n, int m )
{
atgriezties ( n - m ) ;
}


Pēc norobežojošo iekavu izmantošanas koda burtu blokos kļūda ir novērsta un tiek parādīta izvade:

Secinājums

Slēdža paziņojums ir labākā alternatīva garajam if-else-if priekšrakstam, jo ​​tas samazina koda garumu un nodrošina lielāku skaidrību. Lietojot slēdža paziņojumu, C++ bieži sastopamā kompilācijas kļūda, ko var novērot, ir “Pārlēkt uz Case Label Crosses Initialization”. Šī kļūda parasti parādās nepareizas mainīgā deklarācijas dēļ gadījuma etiķetē. To var labot, zem reģistra blokiem ap datiem izmantojot iekļaujošas iekavas.