web-dev-qa-db-fra.com

Comment positionner le curseur de saisie de texte en C?

Ici, j'ai un programme très simple:

 printf("Enter your number in the box below\n");
 scanf("%d",&number);

Maintenant, je voudrais que la sortie ressemble à ceci:

 Enter your number in the box below
 +-----------------+
 | |*|             |
 +-----------------+

Où, | * | est le curseur clignotant où l'utilisateur tape sa valeur.

Étant donné que C est un code linéaire, il n'imprimera pas l'illustration de la boîte, puis demandera la sortie, il imprimera la ligne supérieure et la colonne de gauche, puis après l'entrée imprimera la ligne inférieure et la colonne de droite.

Donc, ma question est, pourrais-je éventuellement imprimer la boîte en premier, puis avoir une fonction pour ramener le curseur dans la boîte?

9
It'sRainingMen

Si vous êtes sous un terminal Unix (xterm, gnome-terminal ...), vous pouvez utiliser des codes console:

#include <stdio.h>

#define clear() printf("\033[H\033[J")
#define gotoxy(x,y) printf("\033[%d;%dH", (y), (x))

int main(void)
{
    int number;

    clear();
    printf(
        "Enter your number in the box below\n"
        "+-----------------+\n"
        "|                 |\n"
        "+-----------------+\n"
    );
    gotoxy(2, 3);
    scanf("%d", &number);
    return 0;
}

Ou en utilisant caractères de dessin de boîte :

printf(
    "Enter your number in the box below\n"
    "╔═════════════════╗\n"
    "║                 ║\n"
    "╚═════════════════╝\n"
);

Plus d'informations:

man console_codes
20
David Ranieri

Dans le terminal linux, vous pouvez utiliser des commandes de terminal pour déplacer votre curseur, comme

printf("\033[8;5Hhello"); // Move to (8, 5) and output hello

d'autres commandes similaires:

printf("\033[XA"); // Move up X lines;
printf("\033[XB"); // Move down X lines;
printf("\033[XC"); // Move right X column;
printf("\033[XD"); // Move left X column;
printf("\033[2J"); // Clear screen

Gardez à l'esprit qu'il ne s'agit pas d'une solution standardisée et que votre code ne sera donc pas indépendant de la plateforme.

9
Cantfindname

Le langage C lui-même n'a aucune notion d'écran avec un curseur. Vous devrez utiliser une sorte de bibliothèque qui fournit ce support. curses est la bibliothèque la plus connue et la plus largement disponible pour le contrôle des terminaux.

1
luser droog