Как да коригирате грешката „Прескачане на етикет кръстосва инициализация“ в C++

Kak Da Korigirate Greskata Preskacane Na Etiket Kr Stosva Inicializacia V C



Операторът switch е най-добрата алтернатива на дългия оператор if-else-if, тъй като намалява дължината на кода и внася по-добра яснота. Стойността се оценява с помощта на командата switch и се тества спрямо стойностите на всеки етикет на case. Ако съвпадението бъде намерено, кодът се изпълнява преди прекъсването, в противен случай той изпълнява кода след „по подразбиране“.

Какво причинява грешката „Прескачане към етикет кръстосва инициализация“ в C++

Докато използвате израза за превключване, в C++ често срещана грешка, която може да се наблюдава, е „Прескачане към инициализация на кръстосани етикети на регистър“. Тази грешка обикновено се появява поради неправилна декларация на променлива в етикета на case. Ето една примерна програма за демонстрация на грешката „Jump to Case Label Crosses Initialization“ в C++:







#include
#include
използване на пространство от имена std;
празно меню_дисплей ( ) ;
int избор_меню ( ) ;
void get_two_operands ( вътр и n, int и м ) ;
вътр ( int n, int m ) ;
int изваждане ( int n, int m ) ;


int main ( )
{
int избор;

направи
{
menu_display ( ) ;
избор = избор_меню ( ) ;
int x, y;
превключвател ( селекция )
{
случай 1 :

get_two_operands ( x,y ) ;
вътр сума = добавяне ( x,y ) ;
cout << х << '+' << и << ' = ' << сума << endl;

прекъсвам ;

случай 2 :

get_two_operands ( x,y ) ;

вътр диф = изваждане ( x,y ) ;
cout << х << '-' << и << ' = ' << диф << endl;

прекъсвам ;
по подразбиране:;
}

} докато ( селекция ! = 3 ) ;

cout << „Програмата е прекратена“ << endl;

връщане 0 ;
}


празно меню_дисплей ( )
{
cout << endl;
cout << 'Основен калкулатор' << endl;
cout << ' 1. Добавяне (+) ' << endl;
cout << ' 2. Извадете (-) ' << endl;
cout << '3. Изход' << endl;

cout << endl;
}

int get_menu_choice ( )
{
int избор;
cout << „Невалиден избор Опитайте отново:“ ;
храня се >> селекция;

докато ( ( ( селекция < 1 ) || ( селекция > 3 ) ) && ( ! cin.провал ( ) ) )
{
cout << ':' ;
храня се >> селекция;
}
ако ( cin.провал ( ) )
{
cout << 'грешка' << endl;
изход ( 1 ) ;
}
връщане селекция;
}

void get_two_operands ( вътр и n, int и м )
{
cout << „Дайте два операнда“ << endl;
cout << 'Първи операнд: ' ;
храня се >> н;
cout << 'Втори операнд:' ;
храня се >> m;

}


вътр ( int n, int m )
{
връщане ( n + m ) ;
}

int изваждане ( int n, int m )
{
връщане ( n - m ) ;
}


Когато тази програма се изпълни, тя връща грешка „Преминаване към етикета на регистъра“. Това е грешка при компилиране.



Тази грешка се появява поради декларирането на променливата в оператор case без ограждащите скоби. Корпусът е само етикет, така че няма възможност да ограничи наличността на параметрите, записани под него. Когато горният код се изпълни, променливите на случай 1 могат да бъдат достъпни от случай 2 и той ще изглежда като неинициализиран, което води до грешки.







Как да коригирате грешката „Прескачане на етикет кръстосва инициализация“ в C++

Тази грешка може да бъде коригирана чрез използване на скоби вътре в блока case, което ще създаде затворен обхват и параметрите на различните блокове case няма да бъдат манипулирани.

Код с отстраняване на грешки

Това е кодът за отстраняване на грешки за горната грешка. Грешката се коригира чрез затваряне на данните под случаи в скобите:



#include
#include
използване на пространство от имена std;
празно меню_дисплей ( ) ;
int избор_меню ( ) ;
void get_two_operands ( вътр и n, int и м ) ;
вътр ( int n, int m ) ;
int изваждане ( int n, int m ) ;


int main ( )
{
int избор;

направи
{
menu_display ( ) ;
избор = избор_меню ( ) ;
int x, y;
превключвател ( селекция )
{
случай 1 :
{
get_two_operands ( x,y ) ;
вътр сума = добавяне ( x, y ) ;
cout << х << '+' << и << ' = ' << сума << endl;
}
прекъсване ;
случай 2 :
{
get_two_operands ( x, y ) ;
вътр диф = изваждане ( x,y ) ;
cout << х << '-' << и << ' = ' << диф << endl;
}
прекъсване ;
по подразбиране:;
}

} докато ( селекция ! = 3 ) ;

cout << „Програмата е прекратена“ << endl;

връщане 0 ;
}


празно меню_дисплей ( )
{
cout << endl;
cout << 'Основен калкулатор' << endl;
cout << ' 1. Добавяне (+) ' << endl;
cout << ' 2. Извадете (-) ' << endl;
cout << '3. Изход' << endl;
cout << endl;
}

int избор_меню ( )
{
int избор;
cout << „Изберете операцията:“ ;
храня се >> селекция;

докато ( ( ( селекция < 1 ) || ( селекция > 3 ) ) && ( ! cin.провал ( ) ) )
{
cout << „Невалиден избор Опитайте отново:“ ;
храня се >> селекция;
}
ако ( cin.провал ( ) )
{
cout << 'грешка' << endl;
изход ( 1 ) ;
}
връщане селекция;
}

void get_two_operands ( вътр и n, int и м )
{
cout << „Дайте два операнда“ << endl;
cout << 'Първи операнд: ' ;
храня се >> н;
cout << 'Втори операнд:' ;
храня се >> m;

}


вътр ( int n, int m )
{
връщане ( n + m ) ;
}

int изваждане ( int n, int m )
{
връщане ( n - m ) ;
}


След използването на ограждащи скоби в блоковете case на кода, грешката е коригирана и изходът се показва:

Заключение

Операторът switch е най-добрата алтернатива за дългия оператор if-else-if, тъй като намалява дължината на кода и внася по-добра яснота. Докато използвате израза за превключване, в C++ често срещана грешка при компилиране, която може да се наблюдава, е „Прескачане към инициализация на кръстосани етикети за регистър“. Тази грешка обикновено се появява поради неправилна декларация на променлива в етикета на case. Това може да бъде коригирано чрез използване на ограждащи скоби около данните под блоковете за случаи.