Ich habe ein C-Programm, das den Benutzer nach seinem Namen mit ein wenig Code fragt, der von stdin auf einer while-Schleife liest (bis Enter gedrückt wird). Ich bin dafür, dass der Benutzer nur ASCII-Werte von 32 bis 126Verhindern von ANSI-Escapezeichen bei der Tastatureingabe in C
Das Problem ist, eintreten kann, wenn ich meinen Pfeil (Cursor) Tasten oder so etwas wie PAGE_DOWN oder andere drücke ... ich die ANSI am Ende mit Escape-Sequenz wird auf das Terminal gedruckt ([A, [6 ~ usw.)].
Hier ist der Codeabschnitt.
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);
ich sicher gewählt haben ASCII-Werte außerhalb des 32-126 Bereich zu ignorieren, so was ist die Ursache dafür? Irgendwelche Ideen? Prost!
stellen Sie ein MCVE bereit _https: //stackoverflow.com/help/mcve_ – CIsForCookies
@CIsForCookies Thanks! Ich habe das passende gekappt hinzugefügt, aber ich kodiere für ein Terminal, das auf einem seriellen COM-Port zuhört, so ist der Code für reguläres stdout ein bisschen unterschiedlich. –
Wenn es sich um eine Zuweisung handelt, lassen Sie das Terminal des Benutzers in Ruhe. Wenn Sie bessere UX für ein Produktionsprogramm wünschen, verwenden Sie GNU readline oder eine ähnliche Bibliothek anstelle von stdio. –