我有一个C程序,要求用户输入一些代码,这些代码在while循环中从stdin读取(直到按下enter键).我确保用户只能输入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值,这是什么原因造成的?有任何想法吗?干杯!