在C中按Escape键无限循环
我在用诅咒图书馆。我希望我的应用程序继续执行,直到按下Escape键。它不应阻止下一个按键输入 我的工作代码是:它在key=getch()处等待用户输入;我希望这是非阻塞,直到有人按下退出键。 它不应该等待键盘输入在C中按Escape键无限循环,c,infinite-loop,ncurses,C,Infinite Loop,Ncurses,我在用诅咒图书馆。我希望我的应用程序继续执行,直到按下Escape键。它不应阻止下一个按键输入 我的工作代码是:它在key=getch()处等待用户输入;我希望这是非阻塞,直到有人按下退出键。 它不应该等待键盘输入 while (true) { key=getch(); if (key==ESCAPE) { break; } //else //{ //execute something //} }//whi
while (true)
{
key=getch();
if (key==ESCAPE)
{
break;
}
//else
//{
//execute something
//}
}//while end
您可以通过设置。然后,当没有键时,getch
将不会阻塞并返回ERR
。您可以通过设置来完成。然后,当没有键时,getch
将不会阻塞并返回ERR
。在循环之前,您可以这样调用函数:
timeout(0);
然后getch
将不再阻塞
该功能的说明如下:
void timeout(int delay);
void wtimeout(WINDOW *win, int delay);
超时和wtimeout例程为设置阻塞或非阻塞读取
给定的窗口。如果延迟为负,则使用阻塞读取(即。,
无限期等待输入)。如果延迟为零,则为非阻塞
使用read(即,如果没有等待的输入,read返回ERR)。如果延迟
为正,则读取延迟毫秒的块,并返回ERR
如果仍然没有输入。因此,这些例程提供相同的功能
作为节点的功能,再加上
仅阻塞延迟毫秒(其中延迟为正)
在循环之前,可以这样调用函数:
timeout(0);
然后getch
将不再阻塞
该功能的说明如下:
void timeout(int delay);
void wtimeout(WINDOW *win, int delay);
超时和wtimeout例程为设置阻塞或非阻塞读取
给定的窗口。如果延迟为负,则使用阻塞读取(即。,
无限期等待输入)。如果延迟为零,则为非阻塞
使用read(即,如果没有等待的输入,read返回ERR)。如果延迟
为正,则读取延迟毫秒的块,并返回ERR
如果仍然没有输入。因此,这些例程提供相同的功能
作为节点的功能,再加上
仅阻塞延迟毫秒(其中延迟为正)
以下是一个示例:
#include <curses.h>
int
main (void)
{
int c;
initscr ();
noecho ();
timeout (0);
while (1)
{
c = getch ();
if (c != ERR)
{
printw ("%c", c);
}
if (c == 27)
{
break;
}
}
echo ();
endwin ();
return 0;
}
#包括
int
主(空)
{
INTC;
initscr();
noecho();
超时(0);
而(1)
{
c=getch();
如果(c!=错误)
{
printw(“%c”,c);
}
如果(c==27)
{
打破
}
}
echo();
endwin();
返回0;
}
函数告诉阻塞调用在返回之前应该等待多长时间。0表示无阻塞,正值x
将等待x
毫秒后返回
以下是curses手册页的部分:
超时和wtimeout例程为给定窗口设置阻塞或非阻塞读取。如果延迟是
负,使用阻塞读取(即无限期等待输入)。如果延迟为零,则为非-
使用阻塞读取(即,如果没有等待的输入,则读取返回ERR)。如果延迟为正,则
读取延迟毫秒的块,如果仍然没有输入,则返回ERR。因此,这些
TINE提供与nodelay相同的功能,另外还提供了能够
仅延迟毫秒(其中延迟为正)
以下是一个示例:
#include <curses.h>
int
main (void)
{
int c;
initscr ();
noecho ();
timeout (0);
while (1)
{
c = getch ();
if (c != ERR)
{
printw ("%c", c);
}
if (c == 27)
{
break;
}
}
echo ();
endwin ();
return 0;
}
#包括
int
主(空)
{
INTC;
initscr();
noecho();
超时(0);
而(1)
{
c=getch();
如果(c!=错误)
{
printw(“%c”,c);
}
如果(c==27)
{
打破
}
}
echo();
endwin();
返回0;
}
函数告诉阻塞调用在返回之前应该等待多长时间。0表示无阻塞,正值x
将等待x
毫秒后返回
以下是curses手册页的部分:
超时和wtimeout例程为给定窗口设置阻塞或非阻塞读取。如果延迟是
负,使用阻塞读取(即无限期等待输入)。如果延迟为零,则为非-
使用阻塞读取(即,如果没有等待的输入,则读取返回ERR)。如果延迟为正,则
读取延迟毫秒的块,如果仍然没有输入,则返回ERR。因此,这些
TINE提供与nodelay相同的功能,另外还提供了能够
仅延迟毫秒(其中延迟为正)
谢谢大家的回复。我用kbhit()解决了这个问题。谢谢大家的回复。我使用kbhit()解决了这个问题。建议1,正确缩进代码建议1,正确缩进代码