Pagina 1 di 1
C funzione per riposizionare cursore
Inviato: sabato 16 giugno 2007, 18:33
da TonT
Ciao a tutti!
Allora ho un Menu del tipo
Codice: Seleziona tutto
printf("\t\t\t** Menu **\n\n");
printf("\t\t\t1) Funzione 1\n");
printf("\t\t\t2) Funzione 2\n");
printf("\t\t\t3) ........\n");
printf("\t\t\t4) .......\n\n");
printf("\t\t\t Scelta: ");
do {
scanf("%d",&scelta);
} while ( (scelta < 1) || (scelta > 4) );
vado ad effettuare un controllo sulla variabile scelta e dico se è di 4 devo ripetere la scelta .. il problema è che se inserisco un numero ( al di fuori dell 'intervallo ) do invio il cursore della shell va in basso...ecco, volevo sapere se c'è una funzione che mi permetta di ri-posizionare il cursore sempre davanti la stringa "Scelta: " o se esiste un altro modo per fare questa cosa...
grazie!
Re: C funzione per riposizionare cursore
Inviato: sabato 16 giugno 2007, 18:36
da christian88
prova così, dovrebbe funzionare se non sbaglio:
Codice: Seleziona tutto
#include<stdio.h>
#include<conio.h>
int scelta;
main()
{do{
printf("\t\t\t** Menu **\n\n");
printf("\t\t\t1) Funzione 1\n");
printf("\t\t\t2) Funzione 2\n");
printf("\t\t\t3) ........\n");
printf("\t\t\t4) .......\n\n");
printf("\t\t\t Scelta: ");
scanf("%d",&scelta);
} while ( scelta < 1 || scelta > 4 );
getch();
}
sono un po' arrugginito sul C >:( ma credo che così funzioni... (yes)
Re: C funzione per riposizionare cursore
Inviato: sabato 16 giugno 2007, 18:44
da TonT
hum..no

cmq getch() non è una funzione standard e la libreria conio.h su linux non esiste ( mi sembra)
Re: C funzione per riposizionare cursore
Inviato: sabato 16 giugno 2007, 18:45
da christian88
infatti, ti avevo avvisato che ero un po' arrugginito

scusa se ti ho fatto perdere tempo :-[
Re: C funzione per riposizionare cursore
Inviato: sabato 16 giugno 2007, 18:46
da TonT
no no tranquillo (b2b)
Re: C funzione per riposizionare cursore
Inviato: sabato 16 giugno 2007, 21:41
da Berghem
premesso che non so come si faccia, ma avendo lo stesso problema devi agire più o menu cosi;
1) fai una funzione menu
2)alla prima istruzion del menu piazzi system("clear");, ti serve per pulire lo schermo
3) se la scelta è 4 richiami la funzione menu
Credo che cosi funzioni e risolvi il tuo problema, poi credo che chiederai cmq come rispostare il cursore.....
Re: C funzione per riposizionare cursore
Inviato: sabato 16 giugno 2007, 21:52
da menelicte
Esatto!
Puoi fare così:
Codice: Seleziona tutto
do {
system("clear");
printf("\t\t\t** Menu **\n\n");
printf("\t\t\t1) Funzione 1\n");
printf("\t\t\t2) Funzione 2\n");
printf("\t\t\t3) ........\n");
printf("\t\t\t4) .......\n\n");
printf("\t\t\t Scelta: ");
scanf("%d",&scelta);
} while ( (scelta < 1) || (scelta > 4) );
non ho trovato alternative "standard"
Re: C funzione per riposizionare cursore
Inviato: sabato 16 giugno 2007, 21:57
da edgy
come ti hanno già detto puoi usare il comando system("clear") che cancella la videata
Codice: Seleziona tutto
#include <stdio.h>
void stampa_menu (void)
{
printf("\t\t\t** Menu **\n\n");
printf("\t\t\t1) Funzione 1\n");
printf("\t\t\t2) Funzione 2\n");
printf("\t\t\t3) ........\n");
printf("\t\t\t4) .......\n\n");
printf("\t\t\t Scelta: ");
}
int main(void)
{
int scelta;
do {
stampa_menu();
scanf("%d",&scelta);
system("clear");
} while ( (scelta < 1) || (scelta > 4) );
}
e fare una roba del genere
EDIT
oops menelicte mi ha battuto sul tempo

Re: C funzione per riposizionare cursore
Inviato: sabato 16 giugno 2007, 21:58
da TonT
hum...può andar bene( se non trovo di meglio)
grazie
ps Non metto Risolto perchè se qualcuno ha qualche altro consiglio è ben accetto

Re: C funzione per riposizionare cursore
Inviato: sabato 16 giugno 2007, 22:02
da max.achille
non ci ho mai provato e non so se può funzionare ma la mia idea è qualcosa del tipo
if (ha premuto invio) {
printf("\b");
}
dove \b sta a significare backspace, ovvero gli fa stampare un "cancella indietro" che dovrebbe mangiarsi l'invio dell'utente. Ok sto delirando vero???
Re: C funzione per riposizionare cursore
Inviato: sabato 16 giugno 2007, 22:12
da menelicte
max.achille ha scritto:
non ci ho mai provato e non so se può funzionare ma la mia idea è qualcosa del tipo
if (ha premuto invio) {
printf("\b");
}
dove \b sta a significare backspace, ovvero gli fa stampare un "cancella indietro" che dovrebbe mangiarsi l'invio dell'utente. Ok sto delirando vero???
non funziona
credo che l'inizio dello stream di output coincida con l'inizio della riga
(non funzionano neanche le funzioni per la gestione del cursore nei file)
Re: C funzione per riposizionare cursore
Inviato: sabato 16 giugno 2007, 22:35
da bite
Ci sono le sequenze di escape.
Codice: Seleziona tutto
printf ("\e[2J"); /* pulisce lo schermo */
printf ("\e1;2f"); /* manda il cursore a riga 1 colonna 2 */
etc etc (prova a cercare "escape sequence" con google)
Oppure librerie come ncurses.
Ciao
Re: C funzione per riposizionare cursore
Inviato: domenica 17 giugno 2007, 16:39
da TonT
ok...ho trovato questo
- Salva la posizione del cursore:
\033[s
- Ripristina la posizione del cursore:
\033[u
Codice: Seleziona tutto
int Menu() {
char scelta;
int s;
printf("\t\t\t** Menu **\n\n");
printf("\t\t\t1) .......\n");
printf("\t\t\t2) ....... \n");
printf("\t\t\t3) ....... \n");
printf("\t\t\t4) ....... \n");
printf("\t\t\t5) ....... \n\n");
printf("\t\t\t Scelta: ");
do {
printf("\033[9;36H");
scanf("%c",&scelta);
s = scelta - 48;
printf(" ");
} while ( (s < 1) || (s > 5) );
return s;
}
int main() {
int r;
system("clear");
r = Menu();
printf("Uscita %d\n",r);
}
l' unica noia è che se digito 7 ( o qualunque altra cosa al di fuori dell intervallo) il cursore si riposiziona ma il 7 rimane.. però funziona alla grande..
edit anche con printf("\033[9;36H"); funziona..però rimane sempre quel problema
ri edit

risolto mettendo un printf(" ");
Re: C funzione per riposizionare cursore
Inviato: domenica 17 giugno 2007, 21:05
da Berghem
prova a memorizzare il cursore avanti di 1, poi lo ripristini e lanci un /b, a quel punto ti dovrebbe cancellare il 7.....