Cara Membetulkan Ralat 'Lompat ke Label Kes Melintasi Permulaan' dalam C++

Cara Membetulkan Ralat Lompat Ke Label Kes Melintasi Permulaan Dalam C



Pernyataan suis ialah alternatif terbaik untuk pernyataan if-else-if yang panjang, kerana ia mengurangkan panjang kod dan membawa kejelasan yang lebih baik. Nilai dinilai menggunakan pernyataan suis dan diuji terhadap nilai setiap label kes. Jika padanan ditemui, kod dilaksanakan sebelum rehat, jika tidak, ia melaksanakan kod selepas 'lalai'.

Apa yang Menyebabkan Ralat 'Lompat ke Label Kes Melintasi Permulaan' dalam C++

Semasa menggunakan penyataan suis, dalam C++ ralat biasa yang mungkin diperhatikan ialah 'Lompat ke Label Kes Salib Permulaan'. Ralat ini biasanya muncul disebabkan pengisytiharan pembolehubah yang salah dalam label kes. Berikut ialah contoh program untuk menunjukkan Ralat 'Jump to Case Label Crosses Initialization' dalam C++:







#include
#include
menggunakan ruang nama std;
void menu_display ( ) ;
int choice_menu ( ) ;
batal get_dua_operand ( int & n, int & m ) ;
int tambah ( int n, int m ) ;
int tolak ( int n, int m ) ;


int utama ( )
{
pemilihan int;

buat
{
menu_paparan ( ) ;
pilihan = menu_pilihan ( ) ;
int x, y;
suis ( pemilihan )
{
kes 1 :

dapatkan_dua_operand ( x, y ) ;
int jumlah = tambah ( x,y ) ;
cout << x << '+' << dan << '=' << jumlah << endl;

rehat ;

kes 2 :

dapatkan_dua_operand ( x,y ) ;

int perbezaan = tolak ( x, y ) ;
cout << x << '-' << dan << '=' << perbezaan << endl;

rehat ;
lalai:;
}

} sementara ( pemilihan ! = 3 ) ;

cout << 'Program Ditamatkan' << endl;

kembali 0 ;
}


void menu_display ( )
{
cout << endl;
cout << 'Kalkulator Asas' << endl;
cout << ' 1. Tambah (+) ' << endl;
cout << ' 2. Tolak (-) ' << endl;
cout << ' 3. Keluar' << endl;

cout << endl;
}

int get_menu_choice ( )
{
pilihan int;
cout << 'Pilihan Tidak Sah Cuba Lagi: ' ;
makan >> pemilihan;

sementara ( ( ( pemilihan < 1 ) || ( pemilihan > 3 ) ) && ( ! cin.gagal ( ) ) )
{
cout << ': ' ;
makan >> pemilihan;
}
jika ( cin.gagal ( ) )
{
cout << 'Ralat' << endl;
keluar ( 1 ) ;
}
kembali pemilihan;
}

batal get_dua_operand ( int & n, int & m )
{
cout << 'Berikan dua operan' << endl;
cout << 'Operan Pertama:' ;
makan >> n;
cout << 'Operan Kedua : ' ;
makan >> m;

}


int tambah ( int n, int m )
{
kembali ( n + m ) ;
}

int tolak ( int n, int m )
{
kembali ( n - m ) ;
}


Apabila program ini dilaksanakan, ia mengembalikan ralat 'Lompat ke Label Kes'. Ini adalah ralat kompilasi.



Ralat ini muncul kerana pengisytiharan pembolehubah di dalam pernyataan kes tanpa kurungan yang disertakan. Kes itu hanyalah label, jadi ia tidak mempunyai keupayaan untuk menyekat ketersediaan parameter yang ditulis di bawahnya. Apabila kod di atas dilaksanakan, pembolehubah kes 1 boleh diakses oleh kes 2, dan ia akan muncul sebagai tidak dimulakan yang membawa kepada ralat.







Cara Membetulkan Ralat 'Lompat ke Label Kes Melintasi Permulaan' dalam C++

Ralat ini boleh diperbaiki dengan menggunakan kurungan di dalam blok kes, yang akan mewujudkan skop tertutup dan parameter blok kes yang berbeza tidak akan dimanipulasi.

Kod Nyahpepijat

Ini ialah kod nyahpepijat untuk ralat di atas. Ralat diperbaiki dengan melampirkan data di bawah kes dalam kurungan:



#include
#include
menggunakan ruang nama std;
void menu_display ( ) ;
int choice_menu ( ) ;
batal get_dua_operand ( int & n, int & m ) ;
int tambah ( int n, int m ) ;
int tolak ( int n, int m ) ;


int utama ( )
{
pemilihan int;

buat
{
menu_paparan ( ) ;
pilihan = menu_pilihan ( ) ;
int x, y;
suis ( pemilihan )
{
kes 1 :
{
dapatkan_dua_operand ( x,y ) ;
int jumlah = tambah ( x,y ) ;
cout << x << '+' << dan << '=' << jumlah << endl;
}
rehat ;
kes 2 :
{
dapatkan_dua_operand ( x, y ) ;
int perbezaan = tolak ( x, y ) ;
cout << x << '-' << dan << '=' << perbezaan << endl;
}
rehat ;
lalai:;
}

} sementara ( pemilihan ! = 3 ) ;

cout << 'Program Ditamatkan' << endl;

kembali 0 ;
}


void menu_display ( )
{
cout << endl;
cout << 'Kalkulator Asas' << endl;
cout << ' 1. Tambah (+) ' << endl;
cout << ' 2. Tolak (-) ' << endl;
cout << ' 3. Keluar' << endl;
cout << endl;
}

int choice_menu ( )
{
pemilihan int;
cout << 'Pilih Operasi:' ;
makan >> pemilihan;

sementara ( ( ( pemilihan < 1 ) || ( pemilihan > 3 ) ) && ( ! cin.gagal ( ) ) )
{
cout << 'Pilihan Tidak Sah Cuba Lagi: ' ;
makan >> pemilihan;
}
jika ( cin.gagal ( ) )
{
cout << 'Ralat' << endl;
keluar ( 1 ) ;
}
kembali pemilihan;
}

batal get_dua_operand ( int & n, int & m )
{
cout << 'Berikan dua operan' << endl;
cout << 'Operan Pertama:' ;
makan >> n;
cout << 'Operan Kedua : ' ;
makan >> m;

}


int tambah ( int n, int m )
{
kembali ( n + m ) ;
}

int tolak ( int n, int m )
{
kembali ( n - m ) ;
}


Selepas penggunaan kurungan melampirkan dalam blok kes kod, ralat telah diperbaiki dan output dipaparkan:

Kesimpulan

Pernyataan suis ialah alternatif terbaik untuk pernyataan if-else-if yang panjang, kerana ia mengurangkan panjang kod dan membawa kejelasan yang lebih baik. Semasa menggunakan penyataan suis, dalam C++ ralat kompilasi biasa yang mungkin diperhatikan ialah 'Lompat ke Label Salib Permulaan'. Ralat ini biasanya muncul disebabkan pengisytiharan pembolehubah yang salah dalam label kes. Ini boleh dibetulkan dengan menggunakan kurungan melampirkan di sekeliling data di bawah blok kes.