లాంగ్ if-else-if స్టేట్మెంట్కు స్విచ్ స్టేట్మెంట్ ఉత్తమ ప్రత్యామ్నాయం, ఎందుకంటే ఇది కోడ్ పొడవును తగ్గిస్తుంది మరియు మెరుగైన స్పష్టతను తెస్తుంది. విలువ స్విచ్ స్టేట్మెంట్ని ఉపయోగించి మూల్యాంకనం చేయబడుతుంది మరియు ప్రతి కేస్ లేబుల్ విలువలకు వ్యతిరేకంగా పరీక్షించబడుతుంది. సరిపోలిక కనుగొనబడితే, కోడ్ విరామానికి ముందు అమలు చేయబడుతుంది, లేకుంటే, అది 'డిఫాల్ట్' తర్వాత కోడ్ను అమలు చేస్తుంది.
C++లో 'జంప్ టు కేస్ లేబుల్ క్రాస్ ఇనిషియలైజేషన్' ఎర్రర్కు కారణమేమిటి
స్విచ్ స్టేట్మెంట్ని ఉపయోగిస్తున్నప్పుడు, C++లో 'కేస్ లేబుల్ క్రాస్ ఇనిషియలైజేషన్కు వెళ్లండి' అనేది గమనించబడే సాధారణ లోపం. కేస్ లేబుల్లోని వేరియబుల్ యొక్క తప్పు ప్రకటన కారణంగా ఈ లోపం సాధారణంగా కనిపిస్తుంది. C++లో 'జంప్ టు కేస్ లేబుల్ క్రాసెస్ ఇనిషియలైజేషన్' ఎర్రర్ని ప్రదర్శించడానికి ఇక్కడ ఒక ఉదాహరణ ప్రోగ్రామ్ ఉంది:
#
#
నేమ్స్పేస్ stdని ఉపయోగించడం;
void menu_display ( ) ;
పూర్ణాంక ఎంపిక_మెనూ ( ) ;
శూన్యం get_to_operands ( int & n, int & m ) ;
int జోడించండి ( int n, int m ) ;
పూర్ణ వ్యవకలనం ( int n, int m ) ;
పూర్ణాంక ప్రధాన ( )
{
పూర్ణాంక ఎంపిక;
చేయండి
{
మెనూ_డిస్ప్లే ( ) ;
ఎంపిక = ఎంపిక_మెనూ ( ) ;
int x, y;
మారండి ( ఎంపిక )
{
కేసు 1 :
రెండు_ఆపరాండ్లను పొందండి ( x,y ) ;
int మొత్తం = జోడించు ( x,y ) ;
కోట్ << x << '+' << మరియు << ' = ' << మొత్తం << endl;
బ్రేక్ ;
కేసు 2 :
రెండు_ఆపరాండ్లను పొందండి ( x,y ) ;
int తేడా = తీసివేయు ( x, y ) ;
కోట్ << x << '-' << మరియు << ' = ' << తేడా << endl;
బ్రేక్ ;
డిఫాల్ట్ :;
}
} అయితే ( ఎంపిక ! = 3 ) ;
కోట్ << 'కార్యక్రమం ముగించబడింది' << endl;
తిరిగి 0 ;
}
void menu_display ( )
{
కోట్ << endl;
కోట్ << 'ప్రాథమిక కాలిక్యులేటర్' << endl;
కోట్ << ' 1. జోడించు (+) ' << endl;
కోట్ << ' 2. తీసివేయి (-) ' << endl;
కోట్ << ' 3. నిష్క్రమించు' << endl;
కోట్ << endl;
}
int get_menu_choice ( )
{
పూర్ణాంక ఎంపిక;
కోట్ << 'చెల్లని ఎంపిక మళ్లీ ప్రయత్నించండి:' ;
ఆహారపు >> ఎంపిక;
అయితే ( ( ( ఎంపిక < 1 ) || ( ఎంపిక > 3 ) ) && ( ! cin.fail ( ) ) )
{
కోట్ << ':' ;
ఆహారపు >> ఎంపిక;
}
ఉంటే ( cin.fail ( ) )
{
కోట్ << 'తప్పు' << endl;
బయటకి దారి ( 1 ) ;
}
తిరిగి ఎంపిక;
}
శూన్యం get_to_operands ( int & n, int & m )
{
కోట్ << 'రెండు ఆపరాండ్లు ఇవ్వండి' << endl;
కోట్ << 'మొదటి ఆపరేటింగ్:' ;
ఆహారపు >> n;
కోట్ << 'సెకండ్ ఆపరాండ్:' ;
ఆహారపు >> m;
}
int జోడించండి ( int n, int m )
{
తిరిగి ( n + m ) ;
}
పూర్ణ వ్యవకలనం ( int n, int m )
{
తిరిగి ( n - m ) ;
}
ఈ ప్రోగ్రామ్ అమలు చేయబడినప్పుడు, ఇది 'కేస్ లేబుల్కి దూకు' ఎర్రర్ను అందిస్తుంది. ఇది సంకలన లోపం.
ఎన్క్లోజింగ్ బ్రాకెట్లు లేకుండా కేస్ స్టేట్మెంట్ లోపల వేరియబుల్ డిక్లరేషన్ కారణంగా ఈ ఎర్రర్ కనిపిస్తుంది. కేసు కేవలం లేబుల్, కాబట్టి దాని కింద వ్రాసిన పారామితుల లభ్యతను పరిమితం చేసే సామర్థ్యం దీనికి లేదు. పై కోడ్ అమలు చేయబడినప్పుడు, కేస్ 1 యొక్క వేరియబుల్స్ కేస్ 2 ద్వారా ప్రాప్తి చేయబడతాయి మరియు ఇది లోపాలకు దారితీసే అసంపూర్తిగా కనిపిస్తుంది.
C++లో 'జంప్ టు కేస్ లేబుల్ క్రాస్ ఇనిషియలైజేషన్' లోపాన్ని ఎలా పరిష్కరించాలి
కేస్ బ్లాక్ లోపల బ్రాకెట్లను ఉపయోగించడం ద్వారా ఈ లోపాన్ని పరిష్కరించవచ్చు, ఇది పరివేష్టిత పరిధిని సృష్టిస్తుంది మరియు వివిధ కేస్ బ్లాక్ల పారామితులు మార్చబడవు.
డీబగ్ చేయబడిన కోడ్
ఇది పై ఎర్రర్ కోసం డీబగ్ చేయబడిన కోడ్. బ్రాకెట్లలోని కేసుల క్రింద డేటాను జతచేయడం ద్వారా లోపం పరిష్కరించబడుతుంది:
#
#
నేమ్స్పేస్ stdని ఉపయోగించడం;
void menu_display ( ) ;
పూర్ణాంక ఎంపిక_మెనూ ( ) ;
శూన్యం get_to_operands ( int & n, int & m ) ;
int జోడించండి ( int n, int m ) ;
పూర్ణ వ్యవకలనం ( int n, int m ) ;
పూర్ణాంక ప్రధాన ( )
{
పూర్ణాంక ఎంపిక;
చేయండి
{
మెనూ_డిస్ప్లే ( ) ;
ఎంపిక = ఎంపిక_మెనూ ( ) ;
int x, y;
మారండి ( ఎంపిక )
{
కేసు 1 :
{
రెండు_ఆపరాండ్లను పొందండి ( x, y ) ;
int మొత్తం = జోడించు ( x,y ) ;
కోట్ << x << '+' << మరియు << ' = ' << మొత్తం << endl;
}
బ్రేక్ ;
కేసు 2 :
{
రెండు_ఆపరాండ్లను పొందండి ( x,y ) ;
int తేడా = తీసివేయు ( x,y ) ;
కోట్ << x << '-' << మరియు << ' = ' << తేడా << endl;
}
బ్రేక్ ;
డిఫాల్ట్ :;
}
} అయితే ( ఎంపిక ! = 3 ) ;
కోట్ << 'కార్యక్రమం ముగించబడింది' << endl;
తిరిగి 0 ;
}
void menu_display ( )
{
కోట్ << endl;
కోట్ << 'ప్రాథమిక కాలిక్యులేటర్' << endl;
కోట్ << ' 1. జోడించు (+) ' << endl;
కోట్ << ' 2. తీసివేయి (-) ' << endl;
కోట్ << ' 3. నిష్క్రమించు' << endl;
కోట్ << endl;
}
పూర్ణాంక ఎంపిక_మెనూ ( )
{
పూర్ణాంక ఎంపిక;
కోట్ << 'ఆపరేషన్ ఎంచుకోండి:' ;
ఆహారపు >> ఎంపిక;
అయితే ( ( ( ఎంపిక < 1 ) || ( ఎంపిక > 3 ) ) && ( ! cin.fail ( ) ) )
{
కోట్ << 'చెల్లని ఎంపిక మళ్లీ ప్రయత్నించండి:' ;
ఆహారపు >> ఎంపిక;
}
ఉంటే ( cin.fail ( ) )
{
కోట్ << 'తప్పు' << endl;
బయటకి దారి ( 1 ) ;
}
తిరిగి ఎంపిక;
}
శూన్యం get_to_operands ( int & n, int & m )
{
కోట్ << 'రెండు ఆపరాండ్లు ఇవ్వండి' << endl;
కోట్ << 'మొదటి ఆపరేటింగ్:' ;
ఆహారపు >> n;
కోట్ << 'సెకండ్ ఆపరాండ్:' ;
ఆహారపు >> m;
}
int జోడించండి ( int n, int m )
{
తిరిగి ( n + m ) ;
}
పూర్ణ వ్యవకలనం ( int n, int m )
{
తిరిగి ( n - m ) ;
}
కోడ్ యొక్క కేస్ బ్లాక్లలో ఎన్క్లోజింగ్ బ్రాకెట్లను ఉపయోగించిన తర్వాత, లోపం పరిష్కరించబడింది మరియు అవుట్పుట్ ప్రదర్శించబడుతుంది:
ముగింపు
లాంగ్ if-else-if స్టేట్మెంట్కు స్విచ్ స్టేట్మెంట్ ఉత్తమ ప్రత్యామ్నాయం, ఎందుకంటే ఇది కోడ్ పొడవును తగ్గిస్తుంది మరియు మెరుగైన స్పష్టతను తెస్తుంది. స్విచ్ స్టేట్మెంట్ను ఉపయోగిస్తున్నప్పుడు, C++లో 'కేస్ లేబుల్ క్రాసెస్ ఇనిషియలైజేషన్కు వెళ్లండి' అనేది గమనించబడే సాధారణ కంపైలేషన్ లోపం. కేస్ లేబుల్లోని వేరియబుల్ యొక్క తప్పు ప్రకటన కారణంగా ఈ లోపం సాధారణంగా కనిపిస్తుంది. కేస్ బ్లాక్ల క్రింద డేటా చుట్టూ ఉన్న బ్రాకెట్లను ఎన్క్లోజింగ్ చేయడం ద్వారా దీనిని పరిష్కరించవచ్చు.