2011-12-08 47 views
9

से तीर कुंजी प्राप्त करना मुझे यकीन है कि इससे पहले पूछा जाना चाहिए था, लेकिन एक त्वरित खोज कुछ भी नहीं मिला।सीएन

सी ++ में cin के साथ तीर/दिशा कुंजी कैसे प्राप्त कर सकता हूं?

उत्तर

12

यह वास्तव में पहले पूछा गया है, और जवाब यह है कि आप इसे नहीं कर सकते हैं।

सी ++ में कीबोर्ड या कंसोल की कोई अवधारणा नहीं है। यह केवल एक अपारदर्शी इनपुट डेटा स्ट्रीम के बारे में जानता है।

आपका भौतिक कंसोल प्रीप्रोसेसेस और आपकी कीबोर्ड गतिविधि को बफर करता है और केवल प्रोग्राम में पका हुआ डेटा भेजता है, आमतौर पर लाइन-बाय-लाइन। कीबोर्ड से सीधे बात करने के लिए, आपको प्लेटफ़ॉर्म-विशिष्ट टर्मिनल हैंडलिंग लाइब्रेरी की आवश्यकता होती है।

लिनक्स पर, यह आमतौर पर ncurses या termcap/terminfo पुस्तकालयों के साथ किया जाता है। विंडोज़ पर आप pdcurses, या शायद विंडोज एपीआई का उपयोग कर सकते हैं (हालांकि मैं उस पहलू से परिचित नहीं हूं)।

एसडीएल, एलेग्रो, इरलिच या ओग्रे 3 डी जैसे ग्राफिक-एप्लिकेशन फ्रेमवर्क पूर्ण कीबोर्ड और माउस हैंडलिंग के साथ भी आते हैं।

+7

आप वास्तव में भाग्यशाली हैं कि आप winAPI से परिचित नहीं हैं। अज्ञानता परमानंद है! :) – FailedDev

+1

@ फ़ेलडेव: हेहे - मुझे इसका थोड़ा सा पता है, और मैंने हंगेरियन जीभ के twisters और 'LHHANDLE का अपना हिस्सा देखा है :-) मैंने कभी कच्चे टर्मिनल हैंडलिंग से संबंधित कुछ भी नहीं देखा है ... महसूस कुछ पॉइंटर्स के साथ झुकाव करने के लिए स्वतंत्र! :-) –

+0

:) इस तरह कुछ नहीं किया है, हालांकि मुझे यकीन है कि यह संभव है। लेकिन ओपी को विशिष्ट ओएस में दिलचस्पी नहीं लगती है, हालांकि उसे चाहिए :) – FailedDev

10

यदि आप conio.h में स्थित getch() का उपयोग कर ध्यान नहीं देते हैं तो यह एक सूचक है।

#include <stdio.h> 
#include <conio.h> 

#define KB_UP 72 
#define KB_DOWN 80 
#define KB_LEFT 75 
#define KB_RIGHT 77 
#define KB_ESCAPE 27 


int main() 
{ 
    int KB_code=0; 

    while(KB_code != KB_ESCAPE) 
    { 
    if (kbhit()) 
     { 
      KB_code = getch(); 
      printf("KB_code = %i \n",KB_code); 

      switch (KB_code) 
      { 
       case KB_LEFT: 
          //Do something 
       break; 

       case KB_RIGHT: 
          //Do something      
       break; 

       case KB_UP: 
          //Do something      
       break; 

       case KB_DOWN: 
          //Do something      
       break; 

      }   

     } 
    } 

    return 0; 
}