J'essaye d'implémenter un programme de console qui a la fonctionnalité de retour arrière. La console accepte un certain nombre de commandes valides que j'ai définies. Exemple:Comment effacer le dernier caractère de la console en utilisant le retour arrière, sans utiliser l'espace char?
Entrée:
Sortie:
J'utilise une instruction switch, qui vérifie le caractère courant retourné par getchar()
.
switch (inChar)
{
case '\r':
case '\n':
{
...
}
case 0x18: // ^x
{
...
}
case 0x08: // backspace
{
printf("\b \b");
break;
}
default:
{
inBuffer[inBufIndx++] = inChar;
inBuffer[inBufIndx] = 0;
printf("%c", inChar); // echo character
}
}
Le code ci-dessus donne l'impression d'effacer le caractère, mais place un espace char. Cela fonctionne pour la plupart des cas, tels que l'effacement du o
de helo
mais ne fonctionne pas lors de l'effacement du o
off helpo
. Mon shell ne peut plus interpréter la commande en raison du caractère espace qui est imprimé à la place de la o
Comment puis-je implémenter le retour arrière pour les caractères à la fin de l'entrée qui doit être effacé?
EDIT: rici est exactement exact. Je ne supprimais pas le personnage que j'avais effacé dans la console de mon inBuffer. Le code ci-dessous a donné la fonctionnalité désirée.
case 0x08:
{
printf("\b \b");
inBuffer[inBufIndx--] = NULL;
break;
}
Pourquoi se 'printf ("\ b")' ne suffit pas? –
J'ai essayé 'printf ("/b ")', mais cela a simplement déplacé le curseur d'un caractère et n'a pas effacé le caractère indésirable. Le code ci-dessus déplace le curseur vers l'arrière, imprime un espace sur le caractère indésirable, puis recule le curseur pour que je puisse réécrire sur l'espace. –
Il semble que vous deviez supprimer les espaces de fin des chaînes de commande avant de tenter de les exécuter. –