मैं उपयोगकर्ता इनपुट को 1 से 5 तक एक संख्या रखने की कोशिश कर रहा हूं और मैं वापस लूप करना चाहता हूं और यदि उपयोगकर्ता उन सीमाओं के भीतर नहीं है तो उपयोगकर्ता एक और नंबर इनपुट करता है। यहाँ कोड है:

int charNum = 0;

while(!((charNum > 0) && (charNum < 6)) ) {

    int charNum = Convert.ToInt32(Console.ReadLine());
            
}

उपरोक्त एक त्रुटि देता है जो कहता है:

"इस दायरे में 'charNum' नाम का एक स्थानीय या पैरामीटर घोषित नहीं किया जा सकता है क्योंकि उस नाम का उपयोग स्थानीय या पैरामीटर को परिभाषित करने के लिए एक संलग्न स्थानीय दायरे में किया जाता है"

मैंने कई चर शामिल करने की कोशिश की है, लेकिन एक लूप के अंदर चर बदलने के साथ एक ही समस्या का सामना करना पड़ता है।

क्या इसके आसपास जाने का कोई तरीका है या क्या मुझे एक आसान समाधान याद आ रहा है?

-3
Milesio 10 सितंबर 2020, 02:35

3 जवाब

सबसे बढ़िया उत्तर

यह एक बहुत ही साधारण गलती है। आप लूप के अंदर charNum वेरिएबल को फिर से घोषित करने का प्रयास कर रहे हैं। बस int को हटा दें और यह घोषणा के बजाय असाइनमेंट बन जाता है।

1
Steven Gann 10 सितंबर 2020, 02:40

आपको कभी नहीं Convert शैली विधियों का उपयोग करना चाहिए और हमेशा TryParse शैली विधियों का उपयोग करना चाहिए उपयोगकर्ता इनपुट के लिए... गंदी छोटी उंगलियों वाले उपयोगकर्ता गलत बात टाइप करेंगे...

यहां एक उदाहरण दिया गया है जो उपरोक्त सभी करता है और आपकी सीमा विफलता पर एक उपयोगकर्ता संदेश के साथ एक पंक्ति में जांचता है

int charNum = 0;

while(!int.TryParse(Console.ReadLine(), out charNum ) || charNum < 0 || charNum >= 6) 
  Console.WriteLine("You had one job, now enter the number correctly");
4
The General 10 सितंबर 2020, 02:53

आप अपने लूप के भीतर ठीक उसी नाम के साथ एक और वैरिएबल बनाने की कोशिश कर रहे हैं, जो लूप के बाहर वेरिएबल के रूप में है। आपको बस वैरिएबल को एक मान असाइन करना है, न कि उसे घोषित करना है।

int charNum = 0;

while(!((charNum > 0) && (charNum < 6)) ) {

    charNum = Convert.ToInt32(Console.ReadLine());
            
}

संपादित करें

मैं उपरोक्त पोस्ट को भी देखूंगा, क्योंकि यह इस स्थिति में क्या नहीं करना है, इस बारे में बहुत अच्छी जानकारी देता है।

3
Aaron Jones 23 अक्टूबर 2020, 02:01