在EOF循环替代中不断按ENTER键

时间:2013-12-23 09:13:58

标签: c loops

我是编程的新手,所以请耐心等待。也使用GNU / Linux。

所以我试图创建一个循环来检查我是否使用CTRL + D结束循环到MySQL连接,但同时不断检查与服务器的连接。

while ((c = getchar()) != EOF)
{
    if (mysql_ping(conn) == 1)
    {
        fprintf(stderr, "Error: %s\n", mysql_error(conn));
    }
}

问题是我经常要按ENTER键来检查连接是否仍然存在,但是我希望它在自动检查与MySQL服务器的连接的同时仍具有EOF功能,以便人们可以关闭连接。

我知道为什么会这样,我只是不确定如何解决它。我需要其他内置函数或可能的外部库吗?

1 个答案:

答案 0 :(得分:3)

问题是getchar()是一个阻塞函数。这意味着,无论何时调用getchar(),它都会等到按下某个键。

尝试这样的事情。

对于linux ... 您需要安装ncurses库。

 #include <curses.h> 

 ...

 int key;
 nodelay(stdscr, TRUE);
 while (1) {
      if ((key = getch()) == ERR) {  // no key is pressed...
        if(mysql_ping(conn) == 1){
          fprintf(stderr, "Error: %s\n", mysql_error(conn));
        }
      }else { // key is pressed...
          if (key == EOF) break;
      }
 }

对于Windows ......

#include <conio.h>

...


while(1){
   if (_kbhit()){
      int key = _getch();
      if (key == EOF) break;
   } 
   if(mysql_ping(conn) == 1){
     fprintf(stderr, "Error: %s\n", mysql_error(conn));
   }
}