Kaip ištaisyti C++ klaidą „Peršokti į Case Label Crosses Initialization“.

Kaip Istaisyti C Klaida Persokti I Case Label Crosses Initialization



Komutatoriaus teiginys yra geriausia ilgo if-else-if teiginio alternatyva, nes jis sumažina kodo ilgį ir suteikia daugiau aiškumo. Vertė įvertinama naudojant jungiklio teiginį ir tikrinama pagal kiekvieno atvejo etiketės reikšmes. Jei randama atitiktis, kodas paleidžiamas prieš pertrauką, kitu atveju jis vykdomas po „numatytosios“.

Kas sukelia C++ klaidą „Pereiti prie atvejo etiketės kryžiaus inicijavimo“.

Naudojant jungiklio teiginį, C++ kalboje dažna klaida, kurią galima pastebėti, yra „Peršokti į Case Label Crosses Initialization“. Ši klaida dažniausiai atsiranda dėl neteisingo kintamojo deklaravimo atvejo etiketėje. Čia yra programos pavyzdys, rodantis klaidą „Peršokti į Case Label Crosses Initialization“ C++:







#include
#include
naudojant vardų sritį std;
tuščias meniu_display ( ) ;
int pasirinkimo_meniu ( ) ;
negalioja gauti_du_operandai ( tarpt & n, tarpt & m ) ;
int pridėti ( int n, int m ) ;
int atimti ( int n, int m ) ;


tarp pagrindinis ( )
{
int atranka;

daryti
{
meniu_display ( ) ;
pasirinkimas = pasirinkimo_meniu ( ) ;
int x, y;
jungiklis ( pasirinkimas )
{
atvejis 1 :

gauti_du_operandus ( x,y ) ;
tarpt suma = pridėti ( x,y ) ;
cout << x << '+' << ir << '=' << suma << endl;

pertrauka ;

atvejis 2 :

gauti_du_operandus ( x,y ) ;

tarpt skirt = atimti ( x,y ) ;
cout << x << '-' << ir << '=' << skirt << endl;

pertrauka ;
numatytas:;
}

} kol ( pasirinkimas ! = 3 ) ;

cout << „Programa nutraukta“ << endl;

grąžinti 0 ;
}


tuščias meniu_display ( )
{
cout << endl;
cout << 'Pagrindinis skaičiuotuvas' << endl;
cout << ' 1. Pridėti (+) ' << endl;
cout << ' 2. Atimkite (-) ' << endl;
cout << '3. Išeikite' << endl;

cout << endl;
}

int get_menu_choice ( )
{
int pasirinkimas;
cout << 'Netinkamas pasirinkimas Bandykite dar kartą:' ;
valgymas >> pasirinkimas;

kol ( ( ( pasirinkimas < 1 ) || ( pasirinkimas > 3 ) ) && ( ! cin.nepavykti ( ) ) )
{
cout << ':' ;
valgymas >> pasirinkimas;
}
jeigu ( cin.nepavykti ( ) )
{
cout << 'Klaida' << endl;
išeiti ( 1 ) ;
}
grąžinti pasirinkimas;
}

negalioja gauti_du_operandai ( tarpt & n, tarpt & m )
{
cout << „Duok du operandus“ << endl;
cout << „Pirmasis operandas:“ ;
valgymas >> n;
cout << 'Antrasis operandas:' ;
valgymas >> m;

}


int pridėti ( int n, int m )
{
grąžinti ( n + m ) ;
}

int atimti ( int n, int m )
{
grąžinti ( n - m ) ;
}


Kai ši programa vykdoma, ji grąžina klaidą „Pereiti prie atvejo etiketės“. Tai kompiliavimo klaida.



Ši klaida atsiranda dėl kintamojo deklaravimo didžiųjų ir mažųjų raidžių sakinyje be skliaustų. Korpusas yra tik etiketė, todėl neturi galimybės apriboti po juo parašytų parametrų prieinamumo. Kai vykdomas aukščiau pateiktas kodas, 1 atvejo kintamieji gali būti pasiekiami naudojant 2 atvejį, ir jis bus rodomas kaip neinicializuotas, todėl atsiranda klaidų.







Kaip ištaisyti C++ klaidą „Peršokti į Case Label Crosses Initialization“.

Šią klaidą galima ištaisyti naudojant skliaustus atvejo bloko viduje, kuri sukurs uždarą sritį ir nebus manipuliuojama skirtingų atvejo blokų parametrais.

Suderintas kodas

Tai yra anksčiau nurodytos klaidos derinimo kodas. Klaida ištaisoma skliausteliuose įtraukiant duomenis po atvejais:



#include
#include
naudojant vardų erdvę std;
tuščias meniu_display ( ) ;
int pasirinkimo_meniu ( ) ;
negalioja gauti_du_operandai ( tarpt & n, tarpt & m ) ;
int pridėti ( int n, int m ) ;
int atimti ( int n, int m ) ;


tarp pagrindinis ( )
{
int atranka;

daryti
{
meniu_display ( ) ;
pasirinkimas = pasirinkimo_meniu ( ) ;
int x, y;
jungiklis ( pasirinkimas )
{
atveju 1 :
{
gauti_du_operandus ( x,y ) ;
tarpt suma = pridėti ( x, y ) ;
cout << x << '+' << ir << '=' << suma << endl;
}
pertrauka ;
atveju 2 :
{
gauti_du_operandus ( x, y ) ;
tarpt skirt = atimti ( x, y ) ;
cout << x << '-' << ir << '=' << skirt << endl;
}
pertrauka ;
numatytas:;
}

} kol ( pasirinkimas ! = 3 ) ;

cout << „Programa nutraukta“ << endl;

grąžinti 0 ;
}


tuščias meniu_display ( )
{
cout << endl;
cout << 'Pagrindinis skaičiuotuvas' << endl;
cout << ' 1. Pridėti (+) ' << endl;
cout << ' 2. Atimkite (-) ' << endl;
cout << '3. Išeikite' << endl;
cout << endl;
}

int pasirinkimo_meniu ( )
{
int atranka;
cout << „Pasirink operaciją:“ ;
valgymas >> pasirinkimas;

kol ( ( ( pasirinkimas < 1 ) || ( pasirinkimas > 3 ) ) && ( ! cin.nepavykti ( ) ) )
{
cout << 'Netinkamas pasirinkimas Bandykite dar kartą:' ;
valgymas >> pasirinkimas;
}
jeigu ( cin.nepavykti ( ) )
{
cout << 'Klaida' << endl;
išeiti ( 1 ) ;
}
grąžinti pasirinkimas;
}

negalioja gauti_du_operandai ( tarpt & n, tarpt & m )
{
cout << „Duok du operandus“ << endl;
cout << „Pirmasis operandas:“ ;
valgymas >> n;
cout << 'Antrasis operandas:' ;
valgymas >> m;

}


int pridėti ( int n, int m )
{
grąžinti ( n + m ) ;
}

int atimti ( int n, int m )
{
grąžinti ( n - m ) ;
}


Kodo didžiųjų raidžių blokuose panaudojus skliaustus, klaida ištaisyta ir rodoma išvestis:

Išvada

Komutatoriaus teiginys yra geriausia ilgo if-else-if teiginio alternatyva, nes jis sumažina kodo ilgį ir suteikia daugiau aiškumo. Naudojant jungiklio teiginį, C++ kalboje įprasta kompiliavimo klaida, kurią galima pastebėti, yra „Peršokti į Case Label Crosses Initialization“. Ši klaida dažniausiai atsiranda dėl neteisingo kintamojo deklaravimo atvejo etiketėje. Tai gali būti ištaisyta naudojant skliaustus aplink duomenis po didžiųjų ir mažųjų raidžių blokais.