是否有讓命令提示符程序等待像system("pause")
功能,並繼續只接受某個鍵後運行?C++ - 暫停程序,直到某個鍵被按下
回答
如果您正在等待換行符,那麼有一種簡單便捷的方法可以實現這一點。只需使用getline
即可。
如果您想獲得其他字符,而不首先接收換行,那麼事情不太便於攜帶。在Unix系統中,您需要將終端設置爲「原始模式」。正如George的評論所提到的,ncurses是一種簡單的方法,它還提供了方便的功能,用於將事物繪製到終端中的特定位置,接收任意鍵等。
在Windows上,您需要使用它console interface。當然,這在Windows以外是不可用的。
尼爾·巴特沃思的意見,也有一個版本詛咒的,對於Windows上運行,被稱爲PDCurses。如果你需要編寫適用於Unix和Windows的軟件,那麼這是一個很好的選擇。
curses也可以在Windows上使用 - http://pdcurses.sourceforge.net/ –
如果getline和ncurses不適合你,總會有conio.h和getch()。有一些問題,這在這個答案Why can't I find <conio.h> on Linux?
好運氣解釋。
在windows控制檯界面getche()函數將在進一步執行之前等待按鍵。
看來你是在誤解我的問題。我想知道的是,如果有一個函數類似於getch(),但只適用於某個特定的鍵。 – Twilight053
如果您使用的是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;
}
編譯步驟:
gcc -o kbhit kbhit.c
當
./kbhit
它會提示您輸入按鍵運行,退出時你點擊一個鍵(不限於輸入或可打印鍵)。
(GOT互聯網 - 你可以修改代碼,並使用特定的CH值如\ n表示回車鍵)
- 1. 暫停程序,直到按下鍵
- 2. Linux - 暫停循環,直到按下鍵
- 3. 停止執行飛鏢程序,直到按下某個鍵
- 4. 暫停功能,直到輸入鍵被按下javascript
- 5. 如何暫停程序,直到按下按鈕
- 6. 如何暫停程序執行,直到按下按鈕?
- 7. C#暫停foreach循環,直到按下按鈕
- 8. C#WPF暫停處理,直到按下按鈕
- 9. 使程序停止,直到輸入被按下
- 10. C:需要暫停過程,直到SIGALRM
- 11. 程序暫停,直到用戶輸入文本並按下按鈕
- 12. C#停止,直到按下按鈕
- 13. 如何暫停pylab圖形,直到按下一個鍵或單擊鼠標?
- 14. 剩下的時間直到Windows暫停
- 15. 檢查某個鍵是否被按下?
- 16. C#控制檯應用程序 - 我想,如果某個鍵被按下
- 17. 暫停網站,直到按下按鈕Javascript
- 18. 暫停執行,直到按下任意按鈕
- 19. 暫停,直到在Python中按下按鈕
- 20. 暫停Javascript執行,直到按下按鈕
- 21. 如何暫停方法,直到按下按鈕?
- 22. 暫停代碼執行,直到按下UIAlertView按鈕?
- 23. 暫停程序並恢復它當一個鍵被擊中
- 24. AutoHotKey:按某個鍵時移動到下一個程序
- 25. .NET WinForms:暫停代碼,直到鼠標移動或鍵盤按
- 26. 暫停TimerTask直到下一次執行
- 27. Php執行暫停直到文件被下載
- 28. C#如何暫停程序
- 29. 在Java中按鍵時暫停/取消暫停線程
- 30. 如何按暫停按鈕時暫停程序執行
你可能想看看[ncurses的(https://www.gnu.org/軟件/ ncurses /) – George
你的意思是像一次一行一行代碼? – ArmenB
不在C++標準庫中。 –