【问题标题】:How to get a character while inside a loop without stopping in the loop?如何在不停止循环的情况下在循环内获取角色?
【发布时间】:2012-03-01 13:39:39
【问题描述】:

您好,我是 C 编程新手,但我正在为游戏制作菜单。我在 ascii 艺术中展示了一条鱼,它每 0.5 秒移动一个字符。我通过一个简单的循环来完成此操作,它继续在屏幕上移动,然后当它到达终点时,鱼被清除,然后再次重复。现在,当这个动画正在进行时,我想提示用户输入,但是当我使用 getchar 或 scanf 执行此操作时,鱼循环会一直等到我按下某个键,然后动画会停止,直到我按下一个键。有人能解释一下我的问题吗?

谢谢

【问题讨论】:

    标签: c loops character wait


    【解决方案1】:

    欢迎来到Threads 的世界。

    要了解线程,请考虑您的计算机的工作方式。如果您的计算机在没有线程的情况下运行,您将无法同时运行多个应用程序。线程允许程序或接口的多个部分同时运行,而不相互依赖。

    在您的情况下,您需要一个用于输入的线程和一个用于动画的单独线程。因此允许两者分开运行。

    【讨论】:

    • 尽管请注意,多线程是一个高级主题,初学者最好避免使用,直到他们熟悉编程语言和操作系统。
    【解决方案2】:

    您无法使用任何标准输入法执行此操作。您要么必须使用 ncurses 之类的东西,要么将终端置于原始模式并进行一些非常花哨的操作。我不知道你在什么平台上,但是原始模式在 Linux 下很难,在 Windows 下更难,所以如果可以的话,我会坚持使用库。

    【讨论】:

    • @JohnRiselvato,这不礼貌。
    • 嗨,克里斯,您能详细说明一下为什么要使用它而不是线程吗?
    • @JohnRiselvato:最大的问题是终端不是多个线程可以轻松共享的东西。即使线程使其可能在用户开始输入的那一刻起,它也会变得乱码和怪异。至少你需要做一些事情,比如关闭回声。是的,线程确实会使工作变得更容易。但是,如果您这样做,则不需要它们,并且坦率地说,任务线程似乎有点重量级。
    • +1 进行解释。我想在这两种情况下,用户都会学到一些对未来想法有用的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    • 2014-12-03
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 2014-02-13
    • 1970-01-01
    相关资源
    最近更新 更多