Windows kullanıyorsanız kbhit(), Microsoft çalışma zamanı kitaplığının bir parçası olanı kullanabilirsiniz . Linux'taysanız, şu şekilde uygulayabilirsiniz kbhit( kaynak ):
#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;
}
Güncelleme: Yukarıdaki işlev OS X'te çalışır (en azından OS X 10.5.8 - Leopard'da, bu yüzden OS X'in daha yeni sürümlerinde çalışmasını beklerim). Bu özetkbhit.c hem Linux hem de OS X olarak kaydedilebilir ve derlenebilir.
gcc -o kbhit kbhit.c
İle çalıştırıldığında
./kbhit
Sizden bir tuşa basmanızı ister ve bir tuşa bastığınızda çıkar (Enter veya yazdırılabilir tuşlarla sınırlı değildir).
@Johnsyweb - lütfen "ayrıntılı kanonik yanıt" ve "tüm endişeler" ile ne demek istediğinizi açıklayın . Ayrıca, yeniden "çapraz platform": Bu uygulama kbhit()ile Linux / Unix / OS X / Windows üzerindeki bir C ++ programında aynı işlevselliğe sahip olabilirsiniz - başka hangi platformlardan bahsediyor olabilirsiniz?
@Johnsyweb için daha fazla güncelleme: C ++ uygulamaları hava geçirmez şekilde kapatılmış bir C ++ ortamında yaşamaz. C ++ 'ın başarısının büyük bir nedeni C ile birlikte çalışabilirliktir. Tüm ana platformlar C arayüzleri ile gerçekleştirilir (dahili uygulama C ++ kullanıyor olsa bile), bu nedenle "miras" konusundaki konuşmanız yersiz görünüyor. Artı, tek bir işlevden bahsederken, bunun için neden C ++ 'ya ihtiyacınız var ("sınıflarla C")? Daha önce de belirttiğim gibi, C ++ ile yazabilir ve bu işlevselliğe kolayca erişebilirsiniz ve uygulamanızın kullanıcılarının bunu nasıl uyguladığınızı umursama olasılığı düşüktür .