LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1627|回复: 9

请教C/C++中按键响应问题

[复制链接]
发表于 2004-11-18 10:54:10 | 显示全部楼层 |阅读模式
我希望按某个键就响应,比如说按"ESC"键程序马上就退出.getc/getchar函数在按键之后都需要按回车确认,而我希望是按键就响应,请问应该如何做,谢谢先.
发表于 2004-11-18 12:00:38 | 显示全部楼层
在 C 专家编程中有这样的描述。可以使用 stty 的特性实现:
  1. #include <stdio.h>
  2. #include <sys/ioctl.h>
  3. int kbhit(void)
  4. {
  5.         int i;
  6.         ioctl(0, FIONREAD, &i);
  7.         return i;
  8. }
  9. int main(void)
  10. {
  11.         int i;
  12.         int c = ' ';
  13.         system("stty raw -echo");
  14.         printf("enter 'q' to quit\n");
  15.         for (i = 0; c != 'q'; i++) {
  16.                 if (kbhit()) {
  17.                         c = getchar();
  18.                         printf("\n got %c, on iteration %d\n", c, i);
  19.                 }
  20.         }
  21.         system("stty cooked echo");
  22. }
复制代码
 楼主| 发表于 2004-11-18 15:06:45 | 显示全部楼层
需要这么复杂?其实我还知道curses里的getch()也可以,就是觉得似乎太麻烦了,没点简单的??
 楼主| 发表于 2004-11-18 15:15:02 | 显示全部楼层
如果是在TC下,没有所谓ioctl那又如何实现?
发表于 2004-11-18 17:16:13 | 显示全部楼层
TC 下不是有 getch() 吗?呵呵
发表于 2004-11-18 17:33:43 | 显示全部楼层
设置终端的属性cc为零,然后读
while(read(0,&buff,1)==0);
/*有按键*/
发表于 2004-11-19 10:06:42 | 显示全部楼层
楼主看来不了解linux下终端的作用是什么,找本书好好看看。
 楼主| 发表于 2004-11-19 11:01:10 | 显示全部楼层
请版主推荐一本书吧,TC下面是有getch()可以完成,但在linux环境下如果用getch不得不把curses.h包含进去.另外qq_xx的终端属性设置有没有资料推荐,能否给个例程.
发表于 2004-11-19 17:48:05 | 显示全部楼层
《UNIX环境高级编程》对此有详细的说明。
 楼主| 发表于 2004-11-19 23:13:17 | 显示全部楼层
谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表