2011-08-08 7 views
8

मैं सी # में एक प्रोग्राम बनाने की कोशिश कर रहा हूं जो मूल रूप से कंसोल का उपयोग करके उपयोगकर्ता द्वारा दबाए गए कुंजी (उदा। एक्स = छोड़ें, डी = डिस्कनेक्ट, आदि;) के आधार पर कार्य करता है। ReadKey(); सी #कंसोल। रीडकी(); और स्विच स्टेटमेंट - अक्षरों का उपयोग

जिस समस्या में मैं चल रहा हूं वह स्विच स्टेटमेंट में रीडकी जानकारी का उपयोग कैसे करें .. क्या कोई मदद कर सकता है? कोड नीचे है।

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace Switch_Test 
{ 
    class Program 
    { 
     static void Main() 
     { 
      Console.WriteLine("Welcome. Please enter your command: "); 
      string chinput; 
      int input; 
      bool activated = false; 
      input = Console.ReadKey(); 
      chinput = Convert.ToChar(input); 
      switch (chinput) 
      { 
       case 'x': 
        { 
         Console.WriteLine("You pressed x..."); 
         break; 
        } 
       case 'y': 
        { 
         Console.WriteLine("You pressed y.."); 
         break; 
        } 
       case 'd': 
        { 
         if (activated != true) 
         { 
          Console.WriteLine("Please activate first!"); 
          break; 
         } 
         else 
         { 
          Console.WriteLine("Active.."); 
          break; 
         } 
        } 
       case 'a': 
        { 
         if (activated != true) 
         { 
          activated = true; 
          Console.WriteLine("Activating.."); 
          break; 
         } 
         else 
         { 
          activated = false; 
          Console.WriteLine("Deactivating."); 
          break; 
         } 
        } 
       default: 
        Console.WriteLine("Unknown Command."); 
        break; 
      } 


     } 
    } 
} 

मुझे पता है कि शायद यह वास्तव में गलत है लेकिन मूल रूप से मैं कंसोल के साथ शुरू हुआ। रीडलाइन(); , केवल अंतर यह है कि मैं इसे फ़ंक्शन को सक्रिय करना चाहता हूं जब आप एंटर दबाएं या अलग-अलग कुंजियों में टाइप करने में सक्षम होने के बजाय एक कुंजी दबाएं। अग्रिम में धन्यवाद!

उत्तर

17

सबसे पहले, Convert.ToChar()ConsoleKeyInfo संरचना पर काम नहीं करता है, इसलिए आपको समस्याएं हैं, यह रूपांतरण एक अपवाद फेंक देगा।

आप बजाय, आप .Key संपत्ति है, जो एक गणनीय है कि हर कुंजी है है पर स्विच कर सकते हैं, चरित्र की कुंजी परिवर्तित करने के लिए की जरूरत नहीं है:

var input = Console.ReadKey(); 

switch (input.Key) //Switch on Key enum 
{ 
    case ConsoleKey.X: 
     break; 
    case ConsoleKey.Y: 
     break; 
} 

संपादित करें:

  1. आप आपने पहले वर्ण की कोशिश करने के लिए input.KeyChar का उपयोग भी कर सकते हैं, फिर आप इसे चालू कर सकते हैं, लेकिन यदि आप चाहते हैं तो आप इसे चालू कर सकते हैं, लेकिन तीर आदि जैसे विभिन्न कुंजियों पर स्विच करना मुश्किल है।
  2. यदि आपको परवाह है कि पत्र कैपी है ताल/छोटे, आप .KeyChar का उपयोग करें या .Modifiers साथ .Key उपयोग कर सकते हैं की जाँच करने के लिए यदि shift कुंजी दबाया गया था जब उपयोगकर्ता पत्र
12

के रूप में आप बस इनपुट ले जा सकते हैं आपके द्वारा लिखा गया:

char input=Console.ReadKey().KeyChar; 
+0

धन्यवाद, यह वही है जो मैं चाहता हूं! – CSharpNewGuy

+0

उत्तर के रूप में चिह्नित करें यदि यह आपके लिए काम करता है! – SMK

1

Console.ReadKey का उपयोग कर () एक प्रकार का एक संरचना ConsoleKeyInfo देता है। इसलिए आपको इस प्रकार से एक चर में रिटर्न प्राप्त करने की आवश्यकता है। फिर कुंजी गणनाकर्ता पर स्विच करें, जिसमें सभी वर्ण हैं।

ConsoleKeyInfo chinput = Console.ReadKey(); 

     switch (chinput.Key) 
     { 
      case ConsoleKey.X: 

       { 
        Console.WriteLine("You pressed x..."); 
        break; 
       } 
      case ConsoleKey.Y: 
       { 
        Console.WriteLine("You pressed y.."); 
        break; 
       } 
      case ConsoleKey.D: 
       { 
        if (activated != true) 
        { 
         Console.WriteLine("Please activate first!"); 
         break; 
        } 
        else 
        { 
         Console.WriteLine("Active.."); 
         break; 
        } 
       } 
      case ConsoleKey.A: 
       { 
        if (activated != true) 
        { 
         activated = true; 
         Console.WriteLine("Activating.."); 
         break; 
        } 
        else 
        { 
         activated = false; 
         Console.WriteLine("Deactivating."); 
         break; 
        } 
       } 
      default: 
       Console.WriteLine("Unknown Command."); 
       break; 
     } 
संबंधित मुद्दे