首页 > 其他 > 详细

关于kbhit()与getch()组合的猜测

时间:2021-05-27 22:28:22      阅读:30      评论:0      收藏:0      [点我收藏+]

kbhit:非阻断函数,运行时不会暂停程序,作用是若有键盘输入,则返回输入的值(应该是键值转换),若没有则返回0。
getch:阻断函数。等待键盘输入,并在输入后立即返回第一个字符,无需按下回车

将以下代码嵌套至while(1)内循环:

void move()
{
    char a;
    bool b;
    b=kbhit();
    if(b)
    {
        a=getch();
        cout<<"yes__________________________________________________________________________________-";
    }
    else
    {
        cout<<"no  "<<a;
    }
}

能够实现持续获得键盘输入,即类似于贪吃蛇等游戏的实时反馈功能。

但是如果将代码中的a=getch()删除,或给a赋值任意常量。

则该功能失效。

测试过程中发现:

kbhit()与getch()组合时,kbhit()的值初始为false,按键后为true,在经过getch()后再次变为false。

删除getch()之后,kbhit()的值初始为false,按键后为true,此后一直为true,不再改变。

 

根据测试过程猜测:

1.kbhit()会根据某一标准判断是否按键,并根据该标准改变值

2.由于getch()具有读取键盘缓存区数据的功能,因此推测kbhit()的改变是由于getch()对于缓存区数据读取造成,即:

kbhit对于是否按键的标准为==>键盘缓存区是否有数据存储

 

这样一来就可以解释为何kbhit()与getch()组合是产生的功能:键盘按键后,键盘缓存区存入数据,kbhit()随之改变值。之后进程调用getch(),getch()读取缓存区内数据,缓存区清零。再次调用kbhit()时,

此时由于缓存区数据已被getch()读取清零,所以kbhit()再次改变值。

 

以上仅为个人猜测。

 

关于kbhit()与getch()组合的猜测

原文:https://www.cnblogs.com/kohano/p/14819593.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!