为啥我不能在 C 中读取 Ctrl+S?

Posted

技术标签:

【中文标题】为啥我不能在 C 中读取 Ctrl+S?【英文标题】: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 中不起作用。 【参考方案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。

以上是关于为啥我不能在 C 中读取 Ctrl+S?的主要内容,如果未能解决你的问题,请参考以下文章

为啥电脑的快捷键ctrl+c和ctrl+v不能用了

电脑为啥不能用键盘Ctrl+VCtrl+C复制粘贴了

为啥不能用scanf读入一个含有空格的字符串

VMware运行Redhat的Linux命令行界面为啥按win+ctrl+s键盘就不能打字了?如何恢复?

为啥我不能从 Golang 正确读取 C 常量?

为啥我不能在 Eclipse Juno 中保存文件?