কম্পিউটার টিউটোরিয়াল

সি ভাষায় kbhit() ফাংশন: কীবোর্ড ইনপুট নন-ব্লকিং চেক

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 কনসোল অ্যাপ্লিকেশন বা শিক্ষামূলক উদাহরণের জন্য। প্রোডাকশন বা ক্রস-প্ল্যাটফর্ম কোডে এটা ব্যবহার করবেন না।

  1. HTML এবং XML-এর পার্থক্য

  2. সি ভাষায় isalnum() ফাংশন

  3. C ভাষায় স্ট্রিং

  4. C ভাষায় অ্যারে