0

我在 windows 上写了一个代码,使用getch()来自stdio. 问题是我必须使用不需要按 Enter 的输入功能。

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

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

谢谢

4

2 回答 2

2

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

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

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

于 2013-11-16T20:39:39.387 回答
1

我们不会在 Linux 中创造奇迹。您要么使用除 之外的其他东西stdio.h,要么不使用任何等效项,getch并且确实取决于按下 Enter 键。

于 2013-11-16T20:38:31.487 回答