在 Linux 上使用 C 中的输入函数,无需按回车键
using input function in C on linux, without pressing enter
我在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::cin
和stdin
将立即对按键做出反应。作为直接后果,各种"有趣"的角色都将通过。例如,当使用删除键时,您将看到退格字符(ctrl-H、char(7)
)显示。
我们不会在 Linux 中创造奇迹。你要么使用除stdio.h
之外的其他东西,要么没有任何等效的getch
,并且依赖于按Enter键。
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么使用 "this" 指针调用派生成员函数?
- 将对象数组的引用传递给函数
- 函数调用中参数的顺序重要吗
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用不带参数的函数访问结构元素
- 代码在main()中运行,但在函数中出现错误
- 内置函数可查看CPP中的成员变量
- 如何获取std::result_of函数的返回类型
- 如何在c++中为模板函数实例创建快捷方式
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗