gpt4 book ai didi

c - 防止 C 键盘输入中的 ANSI 转义字符

转载 作者:太空狗 更新时间:2023-10-29 16:05:42 25 4
gpt4 key购买 nike

我有一个 C 程序,它通过一段代码在 while 循环中(直到按下回车键)从标准输入中读取一些代码来询问用户的姓名。我确保用户只能输入 32 到 126 之间的 ASCII 值。

问题是当我按下箭头(光标)键,或类似 PAGE_DOWN 或其他...我最终将 ANSI 转义序列打印到终端([A、[6~ 等)。

这是代码部分。

char name[6];
char c;
uint8_t i = 0;
while ((c = getchar()) != '\n') {
if (c == 127 || c == 8) { // Checks if backspace or del is pressed
i--;
name[i] = ' ';
} else if (c >= 32 && c <= 126) { // Only legal key presses please!
name[i] = c;
i++;
} else {

}

if ((c >= 32 && c <= 126) || c == 127 || c == 8) {
printf_P(PSTR("%c"), c);
}
}
name[5] = '\0';
move_cursor(15, 18);
printf_P(PSTR("%s"), name);

我当然选择忽略 32 到 126 范围之外的 ASCII 值,那么这是什么原因呢?有任何想法吗?干杯!

最佳答案

这按预期工作。使用 VT100 系列的终端仿真,按下光标向上键会向您的应用程序发送以下序列:

<ESC>[A

现在,ESC (0x1b) 被剥离,因为它超出了您的有效范围。但其他字符完全有效。

因此,为了同时去除这些,您的程序必须识别终端转义码;一个简单的规则是从转义符中删除所有字符到下一个字母。这不会捕获所有终端转义序列,但对于最常见的它会捕获。

在这里您可以查看 list of common terminal control escape sequences

关于c - 防止 C 键盘输入中的 ANSI 转义字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44298727/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com