kbhit() (कीबोर्ड हिट) एक **नॉन-स्टैंडर्ड** फंक्शन है जो <conio.h> में घोषित है (मुख्यतः DOS/विंडोज कंपाइलर्स जैसे Turbo C, Borland, MSVC में)। यह जांचता है कि क्या कीबोर्ड इनपुट उपलब्ध है।
फंक्शन सिग्नेचर
int kbhit(void);
- रिटर्न्स: नॉन-जीरो यदि की प्रेस्ड है, 0 अन्यथा।
- ब्लॉकिंग नहीं करता (नॉन-ब्लॉकिंग)।
उदाहरण
#include <stdio.h>
#include <conio.h> // नॉन-स्टैंडर्ड हेडर
int main() {
char ch;
printf("Enter keys (ESC to exit)\n");
while (1) {
if (kbhit()) { // ध्यान: kbhit() फंक्शन कॉल है, सिर्फ kbhit नहीं
ch = getch(); // कैरेक्टर पढ़ें (इको नहीं)
if ((int)ch == 27) // ESC की
break;
printf("You have entered: %c\n", ch);
}
}
return 0;
}
आउटपुट
Enter keys (ESC to exit) You have entered: i You have entered: t You have entered: D ...
महत्वपूर्ण चेतावनियां
- पोर्टेबल नहीं: लिनक्स/यूनिक्स/मैक पर
conio.hऔरkbhit()उपलब्ध नहीं। - स्टैंडर्ड नहीं: ISO C/C++ मानक का भाग नहीं।
- विकल्प (लिनक्स/यूनिक्स):
select(),poll(), याncursesलाइब्रेरी उपयोग करें।
लिनक्स विकल्प उदाहरण
#include <stdio.h>
#include <termios.h>
#include <unistd.h>
#include <fcntl.h>
int kbhit_linux() {
struct termios oldt, newt;
int ch, 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;
}