QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 761|回复: 3

小弟写的,模仿tc下的getch()函数的程序,大虾看一下

[复制链接]
发表于 2004-10-21 14:00:11 | 显示全部楼层 |阅读模式
[code:1]
#include <stdio.h>
#include <termio.h>

char getch();
void restore();
struct termio ttysave;

int main(int argc, char* argv[])
{
        char ch;
        do{
                ch=getch();
                printf("get '%c'\n", ch);
        }while(ch!=' ');
        exit(0);
}

char getch()
{
        static char ch;
        static int total, flag=1;
        struct termio tty;
        if(flag){
                flag = 0;
                if(ioctl(0, TCGETA, &tty)==-1){
                        printf("error 1\n");
                        exit(1);
                }
                ttysave = tty;
                tty.c_lflag &= ~(ICANON | ECHO| ISIG);
                tty.c_cc[VMIN] = 1;
                tty.c_cc[VTIME] = 0;
                if(ioctl(0, TCSETAF, &tty)==-1){
                        restore();
                        printf("error 2\n");
                        exit(2);
                }
        }
        switch(total=read(0, &ch, 1)){
        case -1:
                restore();
                printf("read error\n");
                exit(3);
                break;
        case 0:
                restore();
                printf("EOF error\n");
                exit(4);
                break;
        default:
                ;
        }
        restore();
        return(ch);
}

void restore()
{
        if(ioctl(0, TCSETAF, &ttysave)==-1){
                printf("restore error\n");
                exit(5);
        }
        return;
}

[/code:1]
/**********************************************
*  gcc编译成功 gcc test.c -o test
*  为什么运行之后没有任何输出就自动结束了,想不通
*  请大虾指教
**********************************************/
发表于 2004-10-21 16:20:10 | 显示全部楼层
restore();应该放在main()的exit(0);的前面
这个功能应该是tc的kbhit(),而不是getch(),与getch()对应的是getchar()。
回复

使用道具 举报

 楼主| 发表于 2004-10-21 16:40:11 | 显示全部楼层
可我已经把restore()放到getch()中exit()的前面了
况且我在getch()中用read()读取键入的字符了,而且也return了
按理说,至少应该是能循环下去的
可我运行之后,根本没反应就结束了
回复

使用道具 举报

发表于 2004-10-21 20:25:42 | 显示全部楼层
我这正常
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-7 07:46 , Processed in 0.060109 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

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