【问题标题】:kbhit() with double loop not working well带有双循环的 kbhit() 无法正常工作
【发布时间】:2013-06-20 05:24:57
【问题描述】:

只是为了好玩,我尝试使用循环打印kbhit(),以便在按键后程序 无限打印该行,直到再次按下键盘。它编译得很好,运行时只是给出空白屏幕。没有指纹。但是单次按键结束程序。但是控制台并没有关闭。

#include <stdio.h>
#include <conio.h>

int main()
{
  while(1)
  {
    if(kbhit())
    {
      while(1)
      {
        if(kbhit())
        {
          goto out;
        }
        printf("Print Ed Infinitum Until Key Press");
      }
    }
  }
  out:
  return 0;
}

我该如何解决这个问题?

【问题讨论】:

  • Don't use gotos (另外,您的意思可能是“广告无限”;))
  • 不,这里很少有很多用户建议使用 goto。我探索了stackoverflow.com/questions/245742/… 和其他一些帖子。
  • 在这种情况下,您只需立即返回if,即可轻松避免goto。如果您必须在退出 goto 之前进行更多清理工作可能更合理。

标签: c loops goto stdio conio


【解决方案1】:
int main(void){
    while(1){
        if(kbhit()){
            getch();
            while(1){
                if(kbhit()){
                    getch();
                    goto out;
                }
                printf("Print Ed Infinitum Until Key Press\n");
            }
        }
    }
out:
    return 0;
}

【讨论】:

    【解决方案2】:
    1. 程序开始
    2. 不存在任何键
    3. 第二个 while 没有执行
    4. 它在第一个循环中旋转

    你按下一个键:

    1. 第一个 kbhit 返回 true
    2. 进入第二个循环
    3. 还有一把钥匙在场
    4. 第二个 kbhit 返回 true
    5. 程序退出

    您需要在进入第二个循环之前删除第一个按键,并且您应该提示自己按一个键来开始程序。或者你可以直接跳到第二个循环。

    【讨论】:

      猜你喜欢
      • 2019-04-07
      • 2014-11-07
      • 1970-01-01
      • 2019-01-01
      • 2015-04-04
      • 2014-12-02
      相关资源
      最近更新 更多