หากคุณใช้ Windows คุณสามารถใช้kbhit()ซึ่งเป็นส่วนหนึ่งของไลบรารีรันไทม์ของ Microsoft หากคุณใช้ Linux คุณสามารถใช้งานได้kbhit(ที่มา ):
#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;
}
อัปเดต:ฟังก์ชั่นข้างต้นทำงานบน OS X (อย่างน้อยบน OS X 10.5.8 - Leopard ดังนั้นฉันคาดหวังว่ามันจะทำงานบน OS X เวอร์ชันล่าสุด) ส่วนสำคัญนี้สามารถบันทึกเป็นkbhit.cและรวบรวมทั้งบน Linux และ OS X ด้วยไฟล์
gcc -o kbhit kbhit.c
เมื่อรันด้วย
./kbhit
จะแจ้งให้คุณกดแป้นและออกเมื่อคุณกดปุ่ม (ไม่ จำกัด เฉพาะปุ่ม Enter หรือแป้นพิมพ์)
@Johnsyweb - โปรดอธิบายความหมายของคุณโดยละเอียดโดย "คำตอบตามรูปแบบบัญญัติโดยละเอียด" และ "ข้อกังวลทั้งหมด" นอกจากนี้ "ข้ามแพลตฟอร์ม": ด้วยการใช้งานนี้kbhit()คุณสามารถมีฟังก์ชันการทำงานเดียวกันในโปรแกรม C ++ บน Linux / Unix / OS X / Windows - แพลตฟอร์มอื่นใดที่คุณอาจอ้างถึง
การอัปเดตเพิ่มเติมสำหรับ @Johnsyweb:แอปพลิเคชัน C ++ ไม่ได้อยู่ในสภาพแวดล้อม C ++ ที่ปิดสนิท เหตุผลสำคัญสำหรับความสำเร็จของ C ++ คือความสามารถในการทำงานร่วมกันกับ C แพลตฟอร์มหลักทั้งหมดได้รับการติดตั้งด้วยอินเทอร์เฟซ C (แม้ว่าการใช้งานภายในจะใช้ C ++ ก็ตาม) ดังนั้นการพูดถึง "ดั้งเดิม" ของคุณจึงดูเหมือนไม่อยู่ นอกจากนี้ในขณะที่เรากำลังพูดถึงฟังก์ชันเดียวทำไมคุณถึงต้องการ C ++ สำหรับสิ่งนี้ ("C พร้อมคลาส") ดังที่ฉันได้ชี้ให้เห็นคุณสามารถเขียนใน C ++ และเข้าถึงฟังก์ชันนี้ได้อย่างง่ายดายและผู้ใช้แอปพลิเคชันของคุณไม่น่าจะสนใจว่าคุณใช้งานอย่างไร