V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Newyorkcity
V2EX  ›  问与答

C 语言,请问在 main()函数内部使用 kbhit()的话,再进入到其它函数之后 kbhit()还能监控吗?或者说, kbhit()有作用域问题吗?

  •  
  •   Newyorkcity · 2017-12-30 15:19:03 +08:00 · 1059 次点击
    这是一个创建于 2531 天前的主题,其中的信息可能已经有所发展或是发生改变。
    C 语言期末小作业让我们做一个贪吃蛇,图片处理函数是预先提供好的。
    在做的过程中我把许多过程分立为不同的函数。
    然后在边写边测的过程中发现(默认是向下移动)敲击一下键盘之后,程序表现的是停下什么也不输出了。然后我考虑了一下,就好奇 kbhit()的作用域的问题。因为我是这样处理贪吃蛇的移动的

    初始化蛇的坐标,方向()
    while(1){
    清空画布()
    打印蛇()
    方向控制函数()
    改变蛇的各个节点的坐标()
    等待 500ms()
    }
    kbhit()我放在了方向控制函数()内部,然后我在想,如果方向控制函数已经结束了,此时我再按键盘,是不是就然并卵了?
    于是我改成
    if (kbhit()){ 方向控制函数() }
    发现还是不行,我又想,那会不会在不断循环中,我已经进入了其它函数之中,此时再按键盘,在其它非 main 函数里,还是白折腾
    so....以上就是我的问题。。如果 kbhit()确实有作用域问题的话,我想 C 语言用过程话方法分离分立函数应该是正确的思路,那该怎么利用 kbhit()呢?
    谢谢!
    1 条回复    2017-12-30 15:31:43 +08:00
    Newyorkcity
        1
    Newyorkcity  
    OP
       2017-12-30 15:31:43 +08:00 via Android
    啊感觉自己好蠢啊。我想明白了。不是键盘一按就立刻要 kbhit 函数有反应
    程序执行起来是很快的。键盘一按输入流里就会有数据。kbhit 只要等到轮到他它再工作检查输入流里有没有数据就好了,和作用域没关系。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3344 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 11:37 · PVG 19:37 · LAX 03:37 · JFK 06:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.