Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C中按Escape键无限循环_C_Infinite Loop_Ncurses - Fatal编程技术网

在C中按Escape键无限循环

在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

我在用诅咒图书馆。我希望我的应用程序继续执行,直到按下Escape键。它不应阻止下一个按键输入

我的工作代码是:它在key=getch()处等待用户输入;我希望这是非阻塞,直到有人按下退出键。 它不应该等待键盘输入

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,正确缩进代码