【问题标题】:Terminate user input (e.g., fgets()) when user presses ESC当用户按下 ESC 时终止用户输入(例如 fgets())
【发布时间】:2015-06-22 10:32:38
【问题描述】:

我正在 Windows 中编写一个简单的 C 控制台应用程序,它在无限循环中获取用户输入。

我希望应用程序处于“阅读模式”并继续阅读,直到用户按下退出键(例如退出键)。

当按下特定的特殊键时,如何接收用户输入并终止它?

例子:

while (1)
{
    // How do I stop loop and input with a specific key hit, e.g., ESC?
    fgets(buff, 255, stdin);
    printf("%s\n", buff);
}

【问题讨论】:

  • 使用while(!kbhit())
  • @Kfir 我添加了一些示例代码来阐明您可能想问的问题。如果这不反映您的原始问题,请随意调整代码并为您的问题添加更多详细信息。
  • @moooeeeep 谢谢,这非常准确。
  • 我是否正确地解释为,当用户按下 ESC 时,您不仅要停止循环,还要退出对 fgets() 的(阻塞)调用?
  • @Kfir 我进一步更新了这个问题。我希望我明白你的意思。

标签: c windows user-input keyboard-events


【解决方案1】:

您可能正在寻找

while(!kbhit())

或者您可以使用包含在#include <conio.h> 中的getch() 或包含在通常用于Enter 键的#include <stdio.h> 中的getchar()

【讨论】:

  • iostream?这是 C。不是 C++。为什么>后面还有)
  • @CoolGuy:那是一个错字。解决了这个问题。是的,我也添加了 C 选项。我突然想到了:)
  • getch()getchar()kbhit() 不同。前者不是 OP 想要的,因为它会暂停程序的执行,直到用户输入一个键(以及 getchar() 的输入键)。后者是 OP 想要的
  • @CoolGuy:- 我同意,这就是为什么我在回答中添加了这一点。刚刚添加了所有选项。等待 OP 发表评论或编辑问题。
  • 我建议说 stdio.h 而不是 iostream 因为问题是关于 C
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多