【问题标题】:Why can't I read Ctrl+S in C?为什么我不能在 C 中读取 Ctrl+S?
【发布时间】:2012-11-03 22:44:57
【问题描述】:

我在C 中有这个程序,它会像这样读取输入:

cod1 = getch ();
  if (kbhit())
    cod2 = getch ();

我可以读取每个 Ctrl+Char 可能的序列,除了 Ctrl+C,它会关闭程序 - 也可以,Ctrl+S,简单就是不抓。但我想让 Ctrl+S 成为我程序中的保存功能;我怎么能那样做?此外,是否可以读取 Alt+Char 字符?因为它将它作为常规字符读取,例如,Alt+A 使用与 A 相同的代码读取。

【问题讨论】:

  • 您可能已经配置了您的 tty,以便 Control-S = XOFF(暂停输出)。
  • 尽量避免使用 conio.h 库,它不是官方的,在 Visual Studio 等某些 IDES 中不起作用。

标签: c input io


【解决方案1】:

您的问题是输入可能会被终端仿真器吃掉。

例如,Alt+<Whatever> 通常保留给菜单快捷方式(例如,Alt+F 打开 File 菜单)。按住 AltF 得到在 File 中的下划线)后,匹配的字符通常会被突出显示。

Ctrl+S is reserved for Stops all output on screen (XOFF) (你的终端模拟器再次这样做)。

至于在命令行应用程序中使用Alt+<...> 作为快捷方式。就我而言,持有Alt 不会影响接收到的字符,它只是设置了在控制台中难以访问的标志。即使在 GUI 应用程序中(在 Windows 中),它也非常棘手,您必须使用 GetAsyncState() 之类的函数来检查是否按下了 alt。

【讨论】:

  • 请注意,您可以在终端中使用stty -ixon 关闭XON/XOFF。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-11
相关资源
最近更新 更多