kbhit() (Keyboard Hit) হলো একটি নন-স্ট্যান্ডার্ড ফাংশন যা <conio.h> হেডারে থাকে (মূলত Windows/DOS কম্পাইলার যেমন Turbo C, Borland, Dev-C++ এ)। এটি চেক করে কীবোর্ডে কোনো কী প্রেস করা হয়েছে কিনা, ব্লক না করে।
ফাংশন সিগনেচার
int kbhit(void);
- রিটার্ন: নন-জিরো (সত্য) — যদি কী প্রেস করা থাকে
- রিটার্ন: ০ (মিথ্যা) — যদি কী প্রেস করা না থাকে
উদাহরণ
#include <stdio.h>
#include <conio.h> // Windows-স্পেসিফিক
int main() {
char ch;
printf("Enter keys (ESC to exit)\n");
while (1) {
if (kbhit()) { // কী প্রেস হয়েছে কিনা চেক
ch = getch(); // ক্যারেক্টার পড়ুন (ইইচো ছাড়া)
if ((int)ch == 27) // ESC কী (ASCII 27)
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
...
(ESC চাপলে প্রোগ্রাম বন্ধ হবে)
গুরুত্বপূর্ণ সীমাবদ্ধতা
⚠️ সতর্কতা:
kbhit() এবং getch() স্ট্যান্ডার্ড সি লাইব্রেরির অংশ নয়। এটি শুধু Windows-বেসড পুরানো কম্পাইলার (Turbo C, Dev-C++, برخی MinGW) এ পাওয়া যায়। লিনাক্স, macOS, বা আধুনিক স্ট্যান্ডার্ড-কম্প্লায়েন্ট কম্পাইলারলে এটি কাজ করবে না।
ক্রস-প্ল্যাটফর্ম বিকল্প
- Linux/Unix:
select(),poll(), বাncursesলাইব্রেরি (nodelay(),getch()) - C++17+:
std::cin.rdbuf()->in_avail()(সীমিত) - পোর্টেবল সমাধান: থ্রেড বা অ্যাসিনক্রোনাস I/O ব্যবহার করুন
উপসংহার
kbhit() শুধু লিগ্যাসি Windows কনসোল অ্যাপ্লিকেশন বা শিক্ষামূলক উদাহরণের জন্য। প্রোডাকশন বা ক্রস-প্ল্যাটফর্ম কোডে এটা ব্যবহার করবেন না।