J'ai un programme C qui demande à l'utilisateur son nom avec un bit de code qui lit depuis stdin sur une boucle while (jusqu'à ce que l'entrée soit enfoncée). Je fais que l'utilisateur ne peut entrer des clés des valeurs ASCII de 32 à 126.Prévention des caractères d'échappement ANSI dans l'entrée du clavier en C
Le problème est quand je presse ma flèche (curseur), ou quelque chose comme PAGE_DOWN ou autre ... Je finissent par avoir la norme ANSI séquence d'échappement imprimée sur le terminal ([A, [6 ~, etc.]).
Voici la section du code.
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);
J'ai certainement choisi d'ignorer les valeurs ASCII en dehors de la gamme de 32 à 126, alors quelle est la cause de cela? Des idées? À votre santé!
fournir un MCVE _https: //stackoverflow.com/help/mcve_ – CIsForCookies
@CIsForCookies Merci! J'ai ajouté le code approprié, mais je code pour un terminal qui écoute sur un port série, donc le code est un peu différent pour la sortie standard. –
S'il s'agit d'une affectation, laissez le terminal de l'utilisateur seul. Si vous voulez un meilleur UX pour un programme de production, utilisez GNU readline ou une bibliothèque similaire à la place de stdio. –