在 Linux 上使用 C 中的输入函数,无需按回车键

using input function in C on linux, without pressing enter

本文关键字:函数 回车 输入 Linux      更新时间:2023-10-16

我在Windows上写了一个代码,使用stdio getch()函数。问题是我必须使用不需要按回车键的输入函数。

我的代码可以在窗口上完美编译和工作。但是,此作业必须在 linux 上运行,当我尝试这样做时,它告诉我它无法识别getch()(或_getch())。问题是根据分配,我不能使用其他包含,但stdio.h(添加标志也是如此),所以我不能使用curses.h来解决这个问题。

我也不能用termios.h等等,我们还没有学会。我该如何解决这个问题?还有其他选择吗?

谢谢

UNIX上的库方法对我们来说是诅咒的,但它是一个框架,设置起来并不完全简单。非库模式是使用文件描述符0 tcgetattr()tcsetattr()将标准输入流转换为非规范输入模式。从内存中键入必要的代码(即,我现在无法测试它,我可能忘记了一些重要的东西)相应的代码如下所示:

struct termios setings;
tcgetattr(0, &settings);
settings.c_lflags &= ~ICANON;
tcsetattr(0, &settings);

显然,真正的实现将验证系统调用是否确实成功。请注意,在此代码之后,std::cinstdin将立即对按键做出反应。作为直接后果,各种"有趣"的角色都将通过。例如,当使用删除键时,您将看到退格字符(ctrl-H、char(7))显示。

我们不会在 Linux 中创造奇迹。你要么使用除stdio.h之外的其他东西,要么没有任何等效的getch,并且依赖于按Enter键。