getch
或getche
会停止输出,直到输入字符为止。我希望我的代码继续在循环中询问字符而不想停止执行代码?
答案 0 :(得分:2)
您正在寻找的是非阻塞输入调用(这意味着它不会阻止,但如果没有可用的输入则立即返回)。
如果您正在谈论recipeDiv = [];
recipeDiv[i] = $("<div/>").addClass("recipeBlock");
recipeDiv[i].appendChild(someElement);
,curses function,则很容易将其设为非阻止:只需致电timeout(0)
。
为了好玩,我创建了一条“蛇”,使用getch()
函数剥离到最低限度for reference
答案 1 :(得分:0)
当您的 CLI C 或 C++ 程序尝试从键盘读取一个键(例如,通过使用“getchar”)时,您的计算机冻结并等待输入的问题不在您的程序的直接控制之下。 “幕后”发生的事情是这样的:您的程序对正在处理您的键盘输入和屏幕输出的任何“终端”程序进行函数调用。在 Linux 中,这称为“控制台”。在原始 Windows 中,它被称为“cmd.exe”。在 Cygwin 中,它被称为“mintty.exe”。 终端导致“冻结”,失败返回,直到用户按下一个或多个键,然后按 Enter 键。
要解决此问题,您需要临时更改终端的设置。为此,请研究用于配置终端的程序的名称。在 Linux 和 Cygwin 中,这是“stty”。将“超时”从“∞ 分秒”(默认值)更改为“1 分秒”(这是您需要的)的 stty 命令是“时间 1”。
在 Linux 或 Cygwin 系统上获得按键而不延迟程序执行的函数如下所示(如果您的系统使用 stty 以外的其他东西来配置其终端,则必须更改 system() 调用的内容) :
// Check for recent keypress on keyboard; if there is one,
// get that character; but time-out after 1 decisecond if
// input does not immediately occur (keep executing program):
char getkey_unlocked (void)
{
char A;
system("stty -icanon");
system("stty -echo");
system("stty time 1"); // CHANGE TIMEOUT FROM ∞ TO 1/10 SECOND
A = (char)getchar();
system("stty echo");
system("stty icanon");
return A;
}
如果没有按下任何键,则返回“-1”,或者任何按下的键的 ASCII 码。
答案 2 :(得分:-2)
你应该使用并发编程,你可以这样做:当父进程等待输入时,子进程执行剩下的代码。
您可以使用函数fork()
在
要检查当前流程是父亲还是孩子,您应该这样做:
// CREATE PID AND PROCESS
pid_t pid;
pid = fork();
if (pid < 0)
puts("ERROR");
else if (pid == 0)
puts("CHILD");
// CODE YOU WANT TO EXECUTE
else
puts("FATHER");
// CODE THAT WAITS FOR INPUT
您也可以使用线程。