2010-10-19 95 views
0

这是我发现的kbhit实现,但由于某种原因,它只是等待一个键被按下,而不是返回除0之外的结果。它并不真正起到kbhit的作用...kbhit实现的问题

int kbhit(void) 
{ 
    struct timeval tv; 
    fd_set read_fd; 

    tv.tv_sec=0; 
    tv.tv_usec=0; 
    FD_ZERO(&read_fd); 
    FD_SET(0,&read_fd); 

    if(select(1, &read_fd, NULL, NULL, &tv) == -1) 
     return 0; 

    if(FD_ISSET(0,&read_fd)) 
     return 1; 

    return 0; 
} 

任何人都可以解释我是什么问题? 我使用Linux,顺便说一句。

我想你可能误解了我,并认为它在一次击键后实际返回非零值。 我的问题是,kbhit总是等待一个关键笔划。

+0

为什么你不使用kbhit实现我向你发送链接以回答你以前的问题? – 2010-10-19 18:44:25

回答

0

stdin可能是行缓冲的。在尝试检测按键时,您需要将其切换为无缓冲。

+0

我该怎么做? – Sason 2010-10-19 17:44:25

+0

@Sason:我在技术上告诉你,在标准模式下stdin会在http://stackoverflow.com/q/3962263/371250 – ninjalj 2010-10-19 22:10:47

+0

上。 setvbuf()用于输出流。 – ninjalj 2010-10-19 22:12:10