为啥我不能在 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
菜单)。按住 Alt
(F
得到在 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?的主要内容,如果未能解决你的问题,请参考以下文章