问题标签 [kbhit]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
923 浏览

c - 为什么在 Eclipse 控制台中输入输入时 kbhit() 总是返回 0?

我在 Windows 7 x64 上为 C/C++ 运行 Eclipse CDT (Helios)。起初,我遇到了在 Eclipse 控制台中运行直到程序退出时才出现输出的问题,即使它在 Windows 控制台中运行时也出现了。我发现这与标准输出流上的缓冲有关。我能够通过以下方式禁用缓冲:

但是现在我无法弄清楚为什么即使在控制台中按下键时 kbhit() 总是返回 0。我尝试在标准输入上禁用缓冲:

但这没有任何效果。我的程序是一个 shell 应用程序。我正在使用 kbhit() 和 getch() 来读取输入,这在程序在 Windows 控制台中运行时有效,但在 Eclipse 控制台中无效。我在这里想念什么?

0 投票
1 回答
2240 浏览

clojure - 如何在 Clojure 中等待按键

当用户按下一个键时,我想跳出一个循环。

在 C 中我会使用 kbhit()。是否有 Clojure(或 Java)等价物?

0 投票
1 回答
153 浏览

scroll - 在字符串末尾插入一个空格

我想知道如何在字符串文本中插入一个空格(在 char *text = argv[1]; 中定义)

例如,如果写:


./mar "你好,你好吗"


我想看看/


你好 你好吗 你好 你好吗 你好 你好吗 你好 你好吗

并不是


你好你好吗你好你好吗你好你好吗你好你好吗你好

在 cli 中水平滚动。

代码是:

0 投票
2 回答
5972 浏览

c++ - 如何在使用 kbhit() 和 getch() 时清除密钥缓冲区

heu 所以我正在使用上述 Windows 功能,幸运的是,这些功能适用于 Windows 2000 及更高版本,但在控制台上制作游戏时我遇到了一个问题:只要按下一个键,控制台就会通过 kbhit( ) 功能,无论是否再次按下某个键...

有什么方法可以清除键盘按键缓冲区,这样您就无法在没有新按键的情况下通过 kbhit?

如果需要新的库下载,我想我可以......但我希望有一种 Windows 标准方式!

谢谢!!

0 投票
1 回答
213 浏览

java - 单独的线程是通过按键终止具有后台任务的应用程序的好策略吗?

我有一个控制台 Java 应用程序,它在后台执行一些任务。Java 不支持控制台 kbhit() 来测试键盘缓冲区中是否存在某些内容,并且据我所知,所有控制台读取和测试都处于阻塞状态。

我要做的是用 console.readLine() 之类的东西启动一个后台线程,然后在这个阻塞调用完成后放置一些终止标志。应用程序后台任务会检查这个标志并决定它们是否需要终止。

顺便说一句,我的应用程序将在其工作期间写入控制台(通过 logback 等记录),但从不读取它。

这样的策略好不好?

0 投票
2 回答
1030 浏览

c++ - C ++循环直到击键

如果我想循环直到击键,有一个非常好的 Windows 解决方案:

但这既不是 ISO 功能,也不适用于除 MS Win 之外的其他操作系统。我找到了其他跨平台解决方案,但它们非常混乱和臃肿 - 难道没有另一种简单的方法来管理这个吗?

0 投票
1 回答
1475 浏览

c++ - 如何在不等待的情况下延迟使用 kbhit()

我正在制作一个程序,其中我有一个无限循环。我使用 kbhit() 来检测是否按下了某个键。我也在循环中使用延迟。所以问题是如果我按下键我必须等待延迟函数中给出的时间来执行 kbhit() 函数动作.....

//现在我必须等待 1000 毫秒才能执行 kbhit() 的代码如何解决这个问题..

提前致谢....

0 投票
7 回答
6909 浏览

c - kbhit() 作为转义触发器

我想将 kbhit() 用于“按任意键继续”功能。但是,在我循环使用 kbhit() 之后,按键存储在标准输入中。因此,在下一个 scanf() 中,之前按下的键出现在输入中。

因此,如果用户按下一个键,假设是字母 K,则 k 出现在“输入数字:”之后。

我曾尝试寻找解决方案,但未能使其中任何一个起作用。我试图将退格字符放入输入流中。我也尝试使用 getch(),但是,用户必须按“Enter”才能继续,所以它违背了最初的目的。我还尝试通过关闭和打开来清除标准输入流,但我无法正常打开它。

编辑:正如 janisz 在评论中所说,我所需要的就是使用系统(“暂停”)。虽然我无法编辑正如 janisz 在评论中所说的那样,我所需要的只是使用系统(“暂停”)。虽然我无法编辑“按任意键继续”,但它足以满足我的目的。如果可能,我将继续尝试此处提供的其他解决方案以获得更好的结果,但目前我需要 system("pause")。

EDIT2:好的,你们中的一些人建议使用 getch()。根据我在网上看到的,getch() 函数从流中获取输入,而屏幕上没有实际显示字符,这正是我想要的。但是,当我尝试使用 getch() 时,按任意键后程序不会继续,它会等待我按 enter 键。有问题吗?我在 Windows 7 上使用 C-Free 4 Standard。

0 投票
1 回答
846 浏览

c++ - 在循环中使用多个 _kbhit()

我有一个 Spaceship 对象,它有 2 种方法。第一种方法是 move()

第二种方法是shoot()

这两种方法都会在一段时间内被调用,一个接一个,所以第二种方法几乎永远不会起作用,因为我需要在它通过 move() 方法之后准确地按下“空格”。我想把这两种方法分开,有没有办法让它工作?

0 投票
3 回答
1249 浏览

c++ - 带有 if 语句滞后的 C++ kbhit

当我将 kbhit 与 if 语句一起使用时,我在制作的游戏中有一种奇怪的滞后反应。但是,当我使用 switch 语句时,我没有看到同样的滞后问题。这是我在 IF 和 switch 中的代码。

当我尝试移动角色时,下面的这段代码会导致延迟,我必须按两次按钮才能移动角色。

不会导致延迟的 switch 语句

我想更好地使用 if 语句,因为它看起来更干净。