यदि आप विंडोज पर हैं, तो आप उपयोग कर सकते हैं kbhit()जो Microsoft रन-टाइम लाइब्रेरी का हिस्सा है। यदि आप लिनक्स पर हैं, तो आप kbhitइस प्रकार ( स्रोत ) लागू कर सकते हैं :
#include <stdio.h>
#include <termios.h>
#include <unistd.h>
#include <fcntl.h>
int kbhit(void)
{
struct termios oldt, newt;
int ch;
int oldf;
tcgetattr(STDIN_FILENO, &oldt);
newt = oldt;
newt.c_lflag &= ~(ICANON | ECHO);
tcsetattr(STDIN_FILENO, TCSANOW, &newt);
oldf = fcntl(STDIN_FILENO, F_GETFL, 0);
fcntl(STDIN_FILENO, F_SETFL, oldf | O_NONBLOCK);
ch = getchar();
tcsetattr(STDIN_FILENO, TCSANOW, &oldt);
fcntl(STDIN_FILENO, F_SETFL, oldf);
if(ch != EOF)
{
ungetc(ch, stdin);
return 1;
}
return 0;
}
अद्यतन: उपरोक्त फ़ंक्शन ओएस एक्स पर काम करता है (कम से कम, ओएस एक्स 10.5.8 - तेंदुए पर, इसलिए मुझे उम्मीद है कि यह ओएस एक्स के अधिक हाल के संस्करणों पर काम करेगा)। इस जिस्ट को kbhit.cलिनक्स और OS X दोनों के साथ संकलित किया जा सकता है
gcc -o kbhit kbhit.c
जब साथ चलाया जाए
./kbhit
यह आपको एक कुंजीपट के लिए प्रेरित करता है, और जब आप कुंजी दबाते हैं (तो प्रवेश या मुद्रण योग्य कुंजी तक सीमित नहीं) से बाहर निकलता है।
@ जॉनोवेब - कृपया "विस्तृत विहित उत्तर" और "सभी चिंताओं" से आपका क्या अभिप्राय है। इसके अलावा, फिर से "क्रॉस-प्लेटफ़ॉर्म": kbhit()आप के इस कार्यान्वयन के साथ लिनक्स / यूनिक्स / ओएस एक्स / विंडोज पर सी ++ प्रोग्राम में समान कार्यक्षमता हो सकती है - आप किन अन्य प्लेटफार्मों का उल्लेख कर सकते हैं?
@ जोंसविएब के लिए और अपडेट: सी ++ एप्लिकेशन एक सीमांकित सी ++ वातावरण में नहीं रहते हैं। सी ++ की सफलता का एक बड़ा कारण सी के साथ अंतर-निर्भरता है। सभी मुख्यधारा के प्लेटफार्मों को सी इंटरफेस (भले ही आंतरिक कार्यान्वयन सी ++ का उपयोग कर रहा है) के साथ लागू किया जाता है, इसलिए आपकी "विरासत" की बात जगह से बाहर लगती है। इसके अलावा, जैसा कि हम एक एकल फ़ंक्शन के बारे में बात कर रहे हैं, आपको इसके लिए C ++ ("सी विद क्लासेस") की आवश्यकता क्यों है? जैसा कि मैंने बताया, आप C ++ में लिख सकते हैं और इस कार्यक्षमता तक आसानी से पहुँच सकते हैं, और आपके एप्लिकेशन के उपयोगकर्ताओं को परवाह नहीं है कि आपने इसे कैसे लागू किया है।