如何用C++在不按回車的情況下獲取標準輸入中的字元

alexxxx發表於2015-05-21

題主問題

Adam:因為不是經常用到,所以我總是記不住如何實現這個功能。在 C/C++ 中,不用到下一行(輸入回車)就從標準輸入獲得字元最好的方法是什麼呢?

另外如果不用把字元敲入螢幕那肯定是最完美的,但我僅僅想不通過敲控制檯(Enter)就獲得鍵盤輸入。

最佳答案,來自 Johannes Schaub – litb

只用純C++的話是不太可能滿足可移植性的,因為這很大程度上依賴於所使用的終端,其中終端連線了stdin(通常是行緩衝)。但是你可以使用某些庫來完成這個功能:

1.Windows  編譯器下可用 conio。使用 _getch() 函式讓你不用等待回車輸入就能得到字元。我不經常使用Windows來進行開發,但是我見過我同學僅僅包含標頭檔案 conio.h 就可以使用了。你可以在維基百科找到 conio.h 。上面列出了 getch() ,在 Visual C++ 中宣告為 deprecated(不贊成使用的)。

2.Linux 中可以使用 curses,在 Windows 中也可以使用相容的 curses 實現。相比於 conio 它也有一個 getch() 函式。(可通過 man getch  來檢視它的 manpage)。同樣你也可以在維基百科中找到 Curses。

如果你打算讓你的程式跨平臺執行的話,我推薦你使用 curses。然而我相信有一些你能用來關掉行緩衝的函式(我相信那應該叫做“原始模式”,與“加工模式”,詳細可以在 man stty 中檢視)。Curses 可以在跨平臺跨終端的環境中幫你處理好這個。

回答中的一些具體程式碼:

來自Kay

這段程式碼使用 kbhit() 檢查鍵盤是否被按下,並用 getch() 獲取輸入的字元。

來自Falcon Momot

在 Linux(或者其他類 UNIX 系統)中可以這樣實現:

相關文章