是否有让命令提示符程序等待像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++标准库中。 –