Paano Ayusin ang 'Jump to Case Label Crosses Initialization' Error sa C++

Paano Ayusin Ang Jump To Case Label Crosses Initialization Error Sa C



Ang switch statement ay ang pinakamahusay na alternatibo para sa mahabang if-else-if na pahayag, dahil binabawasan nito ang haba ng code at nagdudulot ng mas mahusay na kalinawan. Ang value ay sinusuri gamit ang switch statement at sinusubok laban sa mga value ng bawat case label. Kung natagpuan ang tugma, ipapatupad ang code bago ang break, kung hindi, ipapatupad nito ang code pagkatapos ng 'default'.

Ano ang Nagdudulot ng Error sa 'Jump to Case Label Crosses Initialization' Error sa C++

Habang ginagamit ang switch statement, sa C++ ang isang karaniwang error na maaaring maobserbahan ay ang 'Jump to Case Label Crosses Initialization'. Karaniwang lumilitaw ang error na ito dahil sa maling deklarasyon ng isang variable sa loob ng label ng kaso. Narito ang isang halimbawang programa upang ipakita ang 'Jump to Case Label Crosses Initialization' Error sa C++:







#include
#include
gamit ang namespace std;
void menu_display ( ) ;
int choice_menu ( ) ;
void get_two_operands ( int at n, int at m ) ;
int idagdag ( int n, int m ) ;
int ibawas ( int n, int m ) ;


int pangunahing ( )
{
int pagpili;

gawin
{
menu_display ( ) ;
pagpili = choice_menu ( ) ;
int x, y;
lumipat ( pagpili )
{
kaso 1 :

makakuha ng_dalawang_operand ( x, y ) ;
int sum = idagdag ( x, y ) ;
cout << x << '+' << at << '=' << sum << endl;

pahinga ;

kaso 2 :

makakuha ng_dalawang_operand ( x,y ) ;

int diff = ibawas ( x,y ) ;
cout << x << '-' << at << '=' << diff << endl;

pahinga ;
default:;
}

} habang ( pagpili ! = 3 ) ;

cout << 'Tinapos na ang Programa' << endl;

bumalik 0 ;
}


void menu_display ( )
{
cout << endl;
cout << ' Pangunahing Calculator ' << endl;
cout << ' 1. Magdagdag ng (+) ' << endl;
cout << ' 2. Ibawas ang (-) ' << endl;
cout << ' 3. Lumabas' << endl;

cout << endl;
}

int get_menu_choice ( )
{
int pagpipilian;
cout << 'Di-wastong Pagpipilian Subukang Muli: ' ;
kumakain >> pagpili;

habang ( ( ( pagpili < 1 ) || ( pagpili > 3 ) ) && ( ! cin.fail ( ) ) )
{
cout << ': ' ;
kumakain >> pagpili;
}
kung ( cin.fail ( ) )
{
cout << 'Error' << endl;
labasan ( 1 ) ;
}
bumalik pagpili;
}

void get_two_operands ( int at n, int at m )
{
cout << 'Magbigay ng dalawang operand' << endl;
cout << 'Unang Operand: ' ;
kumakain >> n;
cout << 'Ikalawang Operand : ' ;
kumakain >> m;

}


int idagdag ( int n, int m )
{
bumalik ( n + m ) ;
}

int ibawas ( int n, int m )
{
bumalik ( n - m ) ;
}


Kapag naisakatuparan ang program na ito, nagbabalik ito ng error na 'Jump to Case Label'. Ito ay isang compilation error.



Lumilitaw ang error na ito dahil sa deklarasyon ng variable sa loob ng case statement nang walang mga kalakip na bracket. Ang kaso ay isang label lamang, kaya wala itong kakayahang paghigpitan ang pagkakaroon ng mga parameter na nakasulat sa ilalim nito. Kapag ang code sa itaas ay naisakatuparan ang mga variable ng case 1 ay maaaring ma-access ng case 2, at ito ay lalabas bilang uninitialized na humahantong sa mga error.







Paano Ayusin ang 'Jump to Case Label Crosses Initialization' Error sa C++

Maaaring ayusin ang error na ito sa pamamagitan ng paggamit ng mga bracket sa loob ng case block, na lilikha ng isang nakapaloob na saklaw at ang mga parameter ng iba't ibang case block ay hindi manipulahin.

Na-debug na Code

Ito ang na-debug na code para sa error sa itaas. Ang error ay naayos sa pamamagitan ng paglalagay ng data sa ilalim ng mga kaso sa loob ng mga bracket:



#include
#include
gamit ang namespace std;
void menu_display ( ) ;
int choice_menu ( ) ;
void get_two_operands ( int at n, int at m ) ;
int idagdag ( int n, int m ) ;
int ibawas ( int n, int m ) ;


int pangunahing ( )
{
int pagpili;

gawin
{
menu_display ( ) ;
pagpili = choice_menu ( ) ;
int x, y;
lumipat ( pagpili )
{
kaso 1 :
{
makakuha ng_dalawang_operand ( x, y ) ;
int sum = idagdag ( x, y ) ;
cout << x << '+' << at << '=' << sum << endl;
}
pahinga ;
kaso 2 :
{
makakuha ng_dalawang_operand ( x, y ) ;
int diff = ibawas ( x, y ) ;
cout << x << '-' << at << '=' << diff << endl;
}
pahinga ;
default:;
}

} habang ( pagpili ! = 3 ) ;

cout << 'Tinapos na ang Programa' << endl;

bumalik 0 ;
}


void menu_display ( )
{
cout << endl;
cout << ' Pangunahing Calculator ' << endl;
cout << ' 1. Magdagdag ng (+) ' << endl;
cout << ' 2. Ibawas ang (-) ' << endl;
cout << ' 3. Lumabas' << endl;
cout << endl;
}

int choice_menu ( )
{
int pagpili;
cout << 'Piliin Ang Operasyon:' ;
kumakain >> pagpili;

habang ( ( ( pagpili < 1 ) || ( pagpili > 3 ) ) && ( ! cin.fail ( ) ) )
{
cout << 'Di-wastong Pagpipilian Subukang Muli: ' ;
kumakain >> pagpili;
}
kung ( cin.fail ( ) )
{
cout << 'Error' << endl;
labasan ( 1 ) ;
}
bumalik pagpili;
}

void get_two_operands ( int at n, int at m )
{
cout << 'Magbigay ng dalawang operand' << endl;
cout << 'Unang Operand: ' ;
kumakain >> n;
cout << 'Ikalawang Operand : ' ;
kumakain >> m;

}


int idagdag ( int n, int m )
{
bumalik ( n + m ) ;
}

int ibawas ( int n, int m )
{
bumalik ( n - m ) ;
}


Matapos ang paggamit ng mga nakapaloob na bracket sa mga bloke ng kaso ng code, ang error ay naayos at ang output ay ipinapakita:

Konklusyon

Ang switch statement ay ang pinakamahusay na alternatibo para sa mahabang if-else-if na pahayag, dahil binabawasan nito ang haba ng code at nagdudulot ng mas mahusay na kalinawan. Habang ginagamit ang switch statement, sa C++ ang isang karaniwang error sa compilation na maaaring maobserbahan ay 'Jump to Case Label Crosses Initialization'. Karaniwang lumilitaw ang error na ito dahil sa maling deklarasyon ng isang variable sa loob ng label ng kaso. Maaayos ito sa pamamagitan ng paggamit ng mga nakapaloob na bracket sa paligid ng data sa ilalim ng mga bloke ng case.