gpt4 book ai didi

c++ - getch() 在 Linux 上捕获 Ctrl-*letter*

转载 作者:太空狗 更新时间:2023-10-29 12:33:49 24 4
gpt4 key购买 nike

我决定在 Linux 上使用 conio.h 中的 getch。我听说不建议这样做,但我现在需要一个解决方案,并在以后努力提高我的编程技能。

我阅读了很多关于如何输入一键的教程,程序会做一些事情。如:

printf("Press any key\n");
c = getch();
if (c)
printf(" A key is pressed from keyboard ");
else
printf("An error occurred ");

但是,如果我想使用输入 Ctrl+E 来打印“A Ctrl was held with a key”。我将如何解决这个问题?

最佳答案

getch()是在 Windows 中找到的一个函数 #include <conio.h>或在 Unix 上 #include <curses.h> .你是想调用其中一个吗?它不是 C 标准中定义的函数(标准函数当然是 getc()getchar() )。如果您使用 <curses.h> 中的函数,你需要先做一些初始化,然后再完成。

假设您解决了计划调用哪个函数的问题,那么您会发现控制字符是数字 1..26:

  • Control-A = 1
  • Control-Z = 26

您可能需要对 getch() 做一些翻译工作来自 <curses.h> — 它会为功能键和其他特殊击键返回有趣的值,但可能不会返回您对控制键的预期值。

此外,您的终端驱动程序可能会为您解释各种字符(特别是如果您使用 getchar()getc() ),从而使您感到困惑。例如,Control-D 可能会被视为 EOF; Control-H 很可能是退格或删除; Control-C 可能是中断;并且 Control-Z 很可能是“暂停”(意思是“不退出当前程序就返回 shell——只是临时暂停”)。其他控制键有其他含义。例如,您通常可以通过键入 Control-VControl-Z 来获得“真正”的含义——使用 Control-V 来隐藏下一个字符的特殊含义。

关于c++ - getch() 在 Linux 上捕获 Ctrl-*letter*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18606120/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com