2012-12-22 50 views
5

में वर्णों की तुलना करने की कोशिश कर रहा हूं मैं सी # के लिए नया हूं। मैंने इसे प्रोग्रामिंग भाषाओं को अपने निपटान में विस्तारित करना सीखना शुरू कर दिया है, लेकिन मैंने एक छोटी सी समस्या में भाग लिया है जिसे मैंने न तो सी और न ही जावा में सामना किया था।सी #

मैं कीबोर्ड से उपयोगकर्ता प्रतिक्रिया प्राप्त करने की कोशिश कर रहा हूं और फिर इसे संभावित मामलों से तुलना कर रहा हूं और यदि इनमें से कोई भी मामला मेल नहीं खाता है तो मैं चाहता हूं कि उपयोगकर्ता को सही मान में प्रवेश करने तक प्रक्रिया को दोहराना पड़े।

String input = Console.ReadLine(); 
     while ((input[0] != 'N') || (input[0] != 'Y')) 
     { 
      input = Console.ReadLine(); 

     } 
     if (input[0] == 'N') 
     { 
      Console.WriteLine("NO"); 
      Console.ReadKey(); 
     } 
     else if (input[0] == 'Y') 
     { 
      Console.WriteLine("YES"); 
      Console.ReadKey(); 
     } 

यह सबसे कारगर तरीका मैं कोशिश की है दूर नहीं कर रहा है, मैं भी एक करते करते हुए पाश और कई अन्य वेरिएंट की कोशिश की।

मुझे जिस समस्या का सामना करना पड़ता है वह यह है कि जब लूप लूप सक्रिय नहीं होता है, तब सबकुछ ठीक काम करता है, लेकिन जब मैं इसे जोड़ता हूं, तो इनपुट हमेशा एन या वाई होने पर भी लूप में प्रवेश करता है और फिर भी लूप को कभी नहीं छोड़ सकता यह स्पष्ट है कि यह गलत है।

कृपया अगर कोई मुझे कुछ अंतर्दृष्टि दे सकता है कि यह क्यों हो रहा है या कोई ऐसा करने का बेहतर तरीका प्रस्तावित कर सकता है तो इसकी सराहना की जाएगी। धन्यवाद।

करीम

+2

बदलें || के साथ & –

+0

स्विच और ब्रेक करने का प्रयास करें .. – sajanyamaha

+0

मुझे लगता है कि आपको ऐसा कुछ करना चाहिए: जबकि (! (इनपुट [0] == 'वाई' || इनपुट [0] == 'एन')) –

उत्तर

6

अभी, आपके जबकि बयान में सशर्त हमेशा सच हो जाएगा। इसके लिए परीक्षण करने का एक अच्छा तरीका एक ब्रेकपॉइंट रखना है जहां जबकि लूप का परीक्षण किया जा रहा है, और फिर सशर्त के प्रत्येक भाग में "घड़ी जोड़ें"।

बदलें

while ((input[0] != 'N') || (input[0] != 'Y')) 

while ((input[0] != 'N') && (input[0] != 'Y')) 
+0

आपको बहुत बहुत धन्यवाद , मुझे ऐसा मूर्ख लोल लगता है। – JahKnows

0

को अच्छी तरह से अपनी हालत समस्या है। आपकी दो स्थितियां ओरेड हैं, जिसका अर्थ है कि यदि कोई शर्त सत्य है, तो लूप निष्पादित होगा। तो आप पहली बार या स्थिति और नहीं में नीचे

 String input = Console.ReadLine(); 

     while (!((input[0] != 'N') || (input[0] != 'Y'))) 
     { 
      input = Console.ReadLine(); 
     } 

     if (input[0] == 'N') 
     { 
      Console.WriteLine("NO"); 
      Console.ReadKey(); 
     } 

     else if (input[0] == 'Y') 
     { 
      Console.WriteLine("YES"); 
      Console.ReadKey(); 
     } 
1

समस्या के रूप में! (CONDITION1 || CONDITION2) की तरह परिणाम हालत की जाँच कर रही है।

while ((input[0] != 'N') || (input[0] != 'Y')) 

मान लीजिए 'एन' दर्ज किया गया है। अब स्थिति (input[0] != 'Y')झूठी बन जाती है और इसे लूप के दौरान तोड़ना चाहिए लेकिन || (input[0] != 'N') के साथ जो सच बनी हुई है, अंतिम परिणाम सच होने के कारण आता है और इसलिए यह कभी भी लूप से बाहर नहीं निकलता है।

बदलें 0 ||& &

1

के साथ इस प्रयास करें: -

String input = Console.ReadLine(); 
     while ((input[0] != 'N') && (input[0] != 'Y')) 
     { 
      input = Console.ReadLine(); 

     } 
     if (input[0] == 'N') 
     { 
      Console.WriteLine("NO"); 
      Console.ReadKey(); 
     } 
     else if (input[0] == 'Y') 
     { 
      Console.WriteLine("YES"); 
      Console.ReadKey(); 
     } 
3

के रूप में हर किसी को पहले ही बताया गया है, आप || उपयोग कर रहे हैं, जहां आप && का उपयोग करना चाहिए।

इसके अलावा, आप एक स्ट्रिंग के पहले अक्षर तक पहुंचने का भी प्रयास कर रहे हैं जो खाली खाली है। यदि उपयोगकर्ता केवल 'एंटर' हिट करता है तो यह अपवाद का कारण बन जाएगा।

चूंकि आपने बेहतर तरीके से पूछा है, तो यहां एक विकल्प है, जो का उपयोग Console.ReadLine के बजाय करता है, क्योंकि आप केवल एक चरित्र प्राप्त करने में रुचि रखते हैं। यह भी लाभ है कि यह मामला संवेदनशील नहीं है।

while (true) 
{ 
    ConsoleKeyInfo key = Console.ReadKey(); 
    Console.WriteLine(""); // Just for nice typesetting. 

    if (key.Key == ConsoleKey.N) 
    { 
     Console.WriteLine("NO"); 
     break; 
    } 

    if (key.Key == ConsoleKey.Y) 
    { 
     Console.WriteLine("YES"); 
     break; 
    } 
} 
+0

+1 ConcoleKey बेहतर दृष्टिकोण है – exexzian