2014-10-17 36 views
5

Qui ho un programma molto semplice:Come posizionare il cursore del testo di input in C?

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

Ora, vorrei l'uscita per assomigliare a questo:

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

Dove, | * | è il cursore lampeggiante in cui l'utente digita il suo valore.

Poiché C è un codice lineare, non stamperà la casella grafica, quindi chiederà l'output, stamperà la riga superiore e la colonna sinistra, quindi dopo l'input stamperà la riga inferiore e quella destra.

Quindi, la mia domanda è, potrei possibilmente stampare la scatola prima, quindi avere una funzione portare il cursore indietro nella scatola?

+0

forse 'gotoxy()'? –

+0

@SouravGhosh Bene, questo ha uno spostamento relativo piuttosto che assoluto? –

+1

Questo non è possibile nello standard C99. Su alcuni sistemi operativi, è possibile utilizzare alcune librerie come [ncurses] (http://www.gnu.org/software/ncurses/) o [readline] (http://www.gnu.org/software/readline) –

risposta

13

Se hai meno di qualche terminale Unix (xterm, gnome-terminal ...), è possibile utilizzare i codici di console:

#include <stdio.h> 

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

int main(void) 
{ 
    int number; 

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

o utilizzando Box-drawing characters:

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

Maggiori informazioni:

man console_codes 
2

Il linguaggio C non ha alcuna nozione di uno schermo con un cursore. Dovrai usare un qualche tipo di libreria che fornisce questo supporto. è la libreria più nota e ampiamente disponibile per il controllo dei terminali.

6

Nel terminale di Linux è possibile utilizzare i comandi del terminale per spostare il cursore, come ad esempio

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

altri comandi simili:

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 

tenere a mente che questo non è una soluzione standardizzata e quindi il tuo codice non sarà indipendente dalla piattaforma.

+0

+1 Questa è stata un'ottima risposta, è andata ben oltre spiegando anche altri comandi che potrebbero cambiare il cursore. Penso che questa dovrebbe essere la risposta a causa di quanto veloce e breve fosse utile. –

Problemi correlati