使用kbhit() 和getch() 等效項在Linux 中存取鍵盤輸入
提供的Windows 程式碼利用特定於平台的函數_kbhit( ) 和_getch() 來監視鍵盤輸入而不中斷程式循環。然而,這些函數在 Linux 系統上不可用,需要替代方法。
POSIX 相容的kbhit() 等效項
如果您的Linux 系統缺少conio.h 標頭支援kbhit(),請考慮利用Morgan Mattews 的實作。此解決方案在任何符合 POSIX 標準的系統上模擬 kbhit() 功能。
解決getchar() 問題
在termios 層級停用緩衝不僅可以解決kbhit()問題還解決了與getchar() 相關的任何問題,如所提供的資源中所示。這種方法可確保立即接收輸入,而無需等待 Enter 按鍵。
與範例程式碼整合
要使提供的範例程式碼適應Linux 系統,請考慮替換_kbhit () 和_getch() 及其符合POSIX 標準的等效項。下面修改後的程式碼示範了這種整合:
<code class="cpp">#include <termios.h> #include <unistd.h> #include <iostream> int main() { // Disable input buffering termios oldt, newt; tcgetattr(STDIN_FILENO, &oldt); newt = oldt; newt.c_lflag &= ~(ICANON | ECHO); tcsetattr(STDIN_FILENO, TCSANOW, &newt); while (true) { if (kbhit()) { char c = getchar(); if (c == 'g') { std::cout << "You pressed G" << std::endl; } } sleep(500); std::cout << "Running" << std::endl; } // Restore input buffering tcsetattr(STDIN_FILENO, TCSANOW, &oldt); return 0; }</code>
此修改後的程式碼利用 Mattews 的 kbhit() 實作並停用輸入緩衝來實現與原始 Windows 程式碼類似的功能。
以上是如何在 Linux 中實作非阻塞鍵盤輸入:kbhit() 和 getch() 等效項指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!