我使用getch()
中的stdio
函数在Windows上编写了代码。问题是我必须使用不需要输入的输入功能。
我的代码在Windows上编译并完美运行。但是,这个任务必须在linux上运行,当我尝试这样做时,它告诉我它不能识别getch()
(或_getch()
)。
问题在于,根据作业,我不能使用其他包括stdio.h
(同样适用于添加标记),因此我无法使用curses.h
来解决此问题。
我也不能使用termios.h
等等,我们还没有学到它。
我怎么解决这个问题?还有其他选择吗?
由于
答案 0 :(得分:2)
UNIX上的库方法对我们来说是ncurses,但它有点像一个框架,设置起来并不是一件容易的事。非库模式是使用tcgetattr()
和tcsetattr()
将标准输入流转换为非规范输入模式,文件描述符为0
。从内存中键入必要的代码(即,我现在无法测试它,我可能忘记了一些重要的东西)相应的代码看起来像这样:
struct termios setings;
tcgetattr(0, &settings);
settings.c_lflags &= ~ICANON;
tcsetattr(0, &settings);
显然,真正的实现将验证系统调用是否实际成功。请注意,此代码后std::cin
和stdin
会立即对按键做出反应。直接的结果是,所有类型的“有趣”角色都会被传递出去。例如,当使用删除键时,您会看到退格字符(ctrl-H,char(7)
)显示。
答案 1 :(得分:1)
我们不会在Linux中创造奇迹。您要么使用除stdio.h
之外的其他内容,要么使用getch
之外的其他内容,并依赖于按Enter键。