Newyorkcity
V2EX  ›  问与答

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

  •  
  •   Newyorkcity · Dec 30, 2017 · 1420 views
    This topic created in 3152 days ago, the information mentioned may be changed or developed.
    C 语言期末小作业让我们做一个贪吃蛇,图片处理函数是预先提供好的。
    在做的过程中我把许多过程分立为不同的函数。
    然后在边写边测的过程中发现(默认是向下移动)敲击一下键盘之后,程序表现的是停下什么也不输出了。然后我考虑了一下,就好奇 kbhit()的作用域的问题。因为我是这样处理贪吃蛇的移动的

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