C++ में 'जंप टू केस लेबल क्रॉस इनिशियलाइज़ेशन' त्रुटि को कैसे ठीक करें

C Mem Jampa Tu Kesa Lebala Krosa Inisiyala Izesana Truti Ko Kaise Thika Karem



लंबे इफ-एल्स-इफ स्टेटमेंट के लिए स्विच स्टेटमेंट सबसे अच्छा विकल्प है, क्योंकि यह कोड की लंबाई कम करता है और बेहतर स्पष्टता लाता है। मान का मूल्यांकन स्विच स्टेटमेंट का उपयोग करके किया जाता है और प्रत्येक केस लेबल के मानों के विरुद्ध परीक्षण किया जाता है। यदि मिलान पाया जाता है, तो कोड ब्रेक से पहले निष्पादित होता है, अन्यथा, यह 'डिफ़ॉल्ट' के बाद कोड निष्पादित करता है।

C++ में 'जंप टू केस लेबल क्रॉस इनिशियलाइज़ेशन' त्रुटि का क्या कारण है?

स्विच स्टेटमेंट का उपयोग करते समय, C++ में एक सामान्य त्रुटि जो देखी जा सकती है वह है 'जंप टू केस लेबल क्रॉस इनिशियलाइज़ेशन'। यह त्रुटि आमतौर पर केस लेबल के भीतर एक चर की गलत घोषणा के कारण दिखाई देती है। यहां C++ में 'जंप टू केस लेबल क्रॉस इनिशियलाइज़ेशन' त्रुटि को प्रदर्शित करने के लिए एक उदाहरण कार्यक्रम है:







#शामिल करें
#शामिल करें <सीमैथ>
नेमस्पेस एसटीडी का उपयोग करना;
शून्य मेनू_डिस्प्ले ( ) ;
int choice_menu ( ) ;
शून्य get_two_operands ( int यहाँ & एन, इंट & एम ) ;
int जोड़ें ( इंट एन, इंट एम ) ;
int घटाना ( इंट एन, इंट एम ) ;


मुख्य प्रवेश बिंदु ( )
{
पूर्णांक चयन;

करना
{
मेनू_डिस्प्ले ( ) ;
चयन = चॉइस_मेनू ( ) ;
पूर्णांक एक्स, वाई;
बदलना ( चयन )
{
मामला 1 :

get_two_operands ( एक्स, वाई ) ;
int यहाँ जोड़ = जोड़ें ( एक्स, वाई ) ;
अदालत << एक्स << '+' << और << ' = ' << जोड़ << एंडल;

तोड़ना ;

मामला 2 :

get_two_operands ( एक्स, वाई ) ;

int यहाँ अंतर =घटाना ( एक्स, वाई ) ;
अदालत << एक्स << '-' << और << ' = ' << अंतर << एंडल;

तोड़ना ;
गलती करना:;
}

} जबकि ( चयन ! = 3 ) ;

अदालत << 'कार्यक्रम समाप्त' << एंडल;

वापस करना 0 ;
}


शून्य मेनू_डिस्प्ले ( )
{
अदालत << एंडल;
अदालत << 'बेसिक कैलकुलेटर' << एंडल;
अदालत << ' 1. जोड़ें (+) ' << एंडल;
अदालत << ' 2. घटाएं (-) ' << एंडल;
अदालत << ' 3. बाहर निकलें ' << एंडल;

अदालत << एंडल;
}

int get_menu_choice ( )
{
पूर्णांक विकल्प;
अदालत << 'अमान्य विकल्प पुनः प्रयास करें:' ;
खाना >> चयन;

जबकि ( ( ( चयन < 1 ) || ( चयन > 3 ) ) && ( ! cin.असफल ( ) ) )
{
अदालत << ':' ;
खाना >> चयन;
}
अगर ( cin.असफल ( ) )
{
अदालत << 'गलती ' << एंडल;
बाहर निकलना ( 1 ) ;
}
वापस करना चयन;
}

शून्य get_two_operands ( int यहाँ & एन, इंट & एम )
{
अदालत << 'दो ऑपरेंड दीजिए' << एंडल;
अदालत << 'पहला ऑपरेंड:' ;
खाना >> एन;
अदालत << 'दूसरा ऑपरेंड:' ;
खाना >> एम;

}


int जोड़ें ( इंट एन, इंट एम )
{
वापस करना ( एन + एम ) ;
}

int घटाना ( इंट एन, इंट एम )
{
वापस करना ( एन - एम ) ;
}


जब यह प्रोग्राम निष्पादित होता है, तो यह 'जंप टू केस लेबल' त्रुटि देता है। यह एक संकलन त्रुटि है.



यह त्रुटि संलग्न कोष्ठक के बिना केस स्टेटमेंट के अंदर वेरिएबल की घोषणा के कारण प्रकट होती है। मामला सिर्फ एक लेबल है, इसलिए इसमें इसके तहत लिखे गए मापदंडों की उपलब्धता को प्रतिबंधित करने की क्षमता नहीं है। जब उपरोक्त कोड निष्पादित किया जाता है तो केस 1 के वेरिएबल्स को केस 2 द्वारा एक्सेस किया जा सकता है, और यह अप्रारंभीकृत के रूप में दिखाई देगा जिससे त्रुटियां होंगी।







C++ में 'जंप टू केस लेबल क्रॉस इनिशियलाइज़ेशन' त्रुटि को कैसे ठीक करें

इस त्रुटि को केस ब्लॉक के अंदर ब्रैकेट का उपयोग करके ठीक किया जा सकता है, जो एक संलग्न दायरा बनाएगा और विभिन्न केस ब्लॉक के मापदंडों में हेरफेर नहीं किया जाएगा।

डिबग किया गया कोड

यह उपरोक्त त्रुटि के लिए डिबग किया गया कोड है। कोष्ठक के भीतर मामलों के अंतर्गत डेटा संलग्न करके त्रुटि को ठीक किया गया है:



#शामिल करें
#शामिल करें <सीमैथ>
नेमस्पेस एसटीडी का उपयोग करना;
शून्य मेनू_डिस्प्ले ( ) ;
int choice_menu ( ) ;
शून्य get_two_operands ( int यहाँ & एन, इंट & एम ) ;
int जोड़ें ( इंट एन, इंट एम ) ;
int घटाना ( इंट एन, इंट एम ) ;


मुख्य प्रवेश बिंदु ( )
{
पूर्णांक चयन;

करना
{
मेनू_डिस्प्ले ( ) ;
चयन = चॉइस_मेनू ( ) ;
पूर्णांक एक्स, वाई;
बदलना ( चयन )
{
मामला 1 :
{
get_two_operands ( एक्स, वाई ) ;
int यहाँ जोड़ = जोड़ें ( एक्स, वाई ) ;
अदालत << एक्स << '+' << और << ' = ' << जोड़ << एंडल;
}
तोड़ना ;
मामला 2 :
{
get_two_operands ( एक्स, वाई ) ;
int यहाँ अंतर =घटाना ( एक्स, वाई ) ;
अदालत << एक्स << '-' << और << ' = ' << अंतर << एंडल;
}
तोड़ना ;
गलती करना:;
}

} जबकि ( चयन ! = 3 ) ;

अदालत << 'कार्यक्रम समाप्त' << एंडल;

वापस करना 0 ;
}


शून्य मेनू_डिस्प्ले ( )
{
अदालत << एंडल;
अदालत << 'बेसिक कैलकुलेटर' << एंडल;
अदालत << ' 1. जोड़ें (+) ' << एंडल;
अदालत << ' 2. घटाएं (-) ' << एंडल;
अदालत << ' 3. बाहर निकलें ' << एंडल;
अदालत << एंडल;
}

int choice_menu ( )
{
पूर्णांक चयन;
अदालत << 'ऑपरेशन चुनें:' ;
खाना >> चयन;

जबकि ( ( ( चयन < 1 ) || ( चयन > 3 ) ) && ( ! cin.असफल ( ) ) )
{
अदालत << 'अमान्य विकल्प पुनः प्रयास करें:' ;
खाना >> चयन;
}
अगर ( cin.असफल ( ) )
{
अदालत << 'गलती' << एंडल;
बाहर निकलना ( 1 ) ;
}
वापस करना चयन;
}

शून्य get_two_operands ( int यहाँ & एन, इंट & एम )
{
अदालत << 'दो ऑपरेंड दीजिए' << एंडल;
अदालत << 'पहला ऑपरेंड:' ;
खाना >> एन;
अदालत << 'दूसरा ऑपरेंड:' ;
खाना >> एम;

}


int जोड़ें ( इंट एन, इंट एम )
{
वापस करना ( एन + एम ) ;
}

int घटाना ( इंट एन, इंट एम )
{
वापस करना ( एन - एम ) ;
}


कोड के केस ब्लॉक में संलग्न ब्रैकेट के उपयोग के बाद, त्रुटि ठीक हो गई है और आउटपुट प्रदर्शित होता है:

निष्कर्ष

लंबे if-else-if स्टेटमेंट के लिए स्विच स्टेटमेंट सबसे अच्छा विकल्प है, क्योंकि यह कोड की लंबाई कम करता है और बेहतर स्पष्टता लाता है। स्विच स्टेटमेंट का उपयोग करते समय, C++ में एक सामान्य संकलन त्रुटि जो देखी जा सकती है वह है 'जंप टू केस लेबल क्रॉस इनिशियलाइज़ेशन'। यह त्रुटि आमतौर पर केस लेबल के भीतर एक वेरिएबल की गलत घोषणा के कारण दिखाई देती है। इसे केस ब्लॉक के अंतर्गत डेटा के चारों ओर संलग्न कोष्ठक का उपयोग करके ठीक किया जा सकता है।