Jika Anda menggunakan Windows, Anda dapat menggunakan kbhit()yang merupakan bagian dari pustaka run-time Microsoft. Jika Anda menggunakan Linux, Anda dapat mengimplementasikan sebagai kbhitberikut ( sumber ):
#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;
}
Pembaruan: Fungsi di atas berfungsi di OS X (setidaknya, di OS X 10.5.8 - Leopard, jadi saya berharap ini berfungsi pada versi OS X yang lebih baru). Inti ini dapat disimpan sebagai kbhit.cdan dikompilasi di Linux dan OS X dengan
gcc -o kbhit kbhit.c
Saat dijalankan dengan
./kbhit
Ini meminta Anda untuk menekan tombol, dan keluar saat Anda menekan tombol (tidak terbatas pada Enter atau tombol yang dapat dicetak).
@Johnsyweb - uraikan apa yang Anda maksud dengan "jawaban kanonis terperinci" dan "semua masalah". Juga, "lintas-platform": Dengan implementasi ini, kbhit()Anda dapat memiliki fungsi yang sama dalam program C ++ di Linux / Unix / OS X / Windows - platform lain mana yang mungkin Anda rujuk?
Pembaruan lebih lanjut untuk @Johnsyweb: Aplikasi C ++ tidak tinggal di lingkungan C ++ yang tertutup rapat. Alasan utama keberhasilan C ++ adalah interoperabilitas dengan C. Semua platform utama diimplementasikan dengan antarmuka C (meskipun implementasi internal menggunakan C ++) sehingga pembicaraan Anda tentang "warisan" tampaknya tidak pada tempatnya. Plus, karena kita berbicara tentang satu fungsi, mengapa Anda membutuhkan C ++ untuk ini ("C dengan kelas")? Seperti yang saya tunjukkan, Anda dapat menulis dalam C ++ dan mengakses fungsionalitas ini dengan mudah, dan pengguna aplikasi Anda tidak peduli bagaimana Anda menerapkannya.