C语言Termios隐藏输入字符,使用termios.h在C程序中要求用户输入时,如何使箭头键和退格键正常工作?...

代码片段展示了如何使用termios.h库禁用规范模式,以便用户在输入时不显示回显,并允许即时查看输入。然而,这导致了光标上移的问题和退格键的不正常行为。退格键输出奇怪的符号而非删除字符。作者寻求解决方案,以限制光标移动并在不使用规范模式的情况下正确处理退格键。
摘要由CSDN通过智能技术生成

因此,我有以下代码,该代码基本上只读取字符用户输入并打印它们,直到输入“ q”为止。

#include

#include

#include

#include

int main(void) {

char c;

static struct termios oldtio, newtio;

tcgetattr(0, &oldtio);

newtio = oldtio;

newtio.c_lflag &= ~ICANON;

newtio.c_lflag &= ~ECHO;

tcsetattr(0, TCSANOW, &newtio);

printf("Give text: ");

fflush(stdout);

while (1) {

read(0, &c, 1);

printf("%c", c);

fflush(stdout);

if (c == 'q') { break; }

}

printf("\n");

tcsetattr(0, TCSANOW, &oldtio);

return 0;

}

在主要功能的开头,我关闭规范模式,以使用户能够在输入时看到自己的输入。我还关闭了回声,例如在按下向上箭头键时不会弹出诸如“ ^ [[A””之类的信息。这行得通,但是我也可以将光标移到终端窗口的上排,这不好。有没有办法解决此问题,使用户只能在当前行内移动?

另一个问题是退格键。当我按下它时,程序将打印一个奇怪的符号(我假设它是0x7f),而不是擦除光标当前位置的剩余字符。我应该以某种方式适当地处理程序中的退格键输出,但是我不知道该怎么办,因为它是这个奇怪的十六进制数。有什么提示吗?

我也一直在考虑使这项工作可行的一种方法是使用规范模式,以便自动使用箭头键和退格功能。但是,规范模式逐行工作,因此直到用户单击“ Enter”后,文本才会出现。到目前为止,我还没有找到让用户在键入时看到其输入的任何方法。这有可能吗?

而且,请不要提出任何疑问或阅读建议。我想使用termios.h做到这一点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值