C funzione per riposizionare cursore

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
Avatar utente
TonT
Prode Principiante
Messaggi: 156
Iscrizione: venerdì 1 settembre 2006, 19:39
Località: là sui monti con annette

C funzione per riposizionare cursore

Messaggio 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!
...Ma io, senza legge, rubai in nome mio,
quegli altri, nel nome di dio...
Avatar utente
christian88
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1648
Iscrizione: mercoledì 31 gennaio 2007, 15:34
Località: Cernusco sul naviglio
Contatti:

Re: C funzione per riposizionare cursore

Messaggio 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)
Stilogo | MondoSviluppatori | ItalianDevTeam - Android
Errare è umano, ma per incasinare tutto ci vuole la password di root!!
Ubuntu user #19519
Avatar utente
TonT
Prode Principiante
Messaggi: 156
Iscrizione: venerdì 1 settembre 2006, 19:39
Località: là sui monti con annette

Re: C funzione per riposizionare cursore

Messaggio da TonT »

hum..no  :D
cmq getch() non è una funzione standard e la libreria conio.h su linux non esiste ( mi sembra)
...Ma io, senza legge, rubai in nome mio,
quegli altri, nel nome di dio...
Avatar utente
christian88
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1648
Iscrizione: mercoledì 31 gennaio 2007, 15:34
Località: Cernusco sul naviglio
Contatti:

Re: C funzione per riposizionare cursore

Messaggio da christian88 »

infatti, ti avevo avvisato che ero un po' arrugginito  ;D scusa se ti ho fatto perdere tempo  :-[
Stilogo | MondoSviluppatori | ItalianDevTeam - Android
Errare è umano, ma per incasinare tutto ci vuole la password di root!!
Ubuntu user #19519
Avatar utente
TonT
Prode Principiante
Messaggi: 156
Iscrizione: venerdì 1 settembre 2006, 19:39
Località: là sui monti con annette

Re: C funzione per riposizionare cursore

Messaggio da TonT »

no no tranquillo (b2b)
...Ma io, senza legge, rubai in nome mio,
quegli altri, nel nome di dio...
Avatar utente
Berghem
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 2265
Iscrizione: giovedì 14 aprile 2005, 22:28
Località: Dalmen

Re: C funzione per riposizionare cursore

Messaggio 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.....
Avatar utente
menelicte
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 596
Iscrizione: lunedì 4 giugno 2007, 0:04

Re: C funzione per riposizionare cursore

Messaggio 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"
"Tentare è il primo passo verso il fallimento" Homer J.
edgy
Prode Principiante
Messaggi: 134
Iscrizione: sabato 28 ottobre 2006, 14:32

Re: C funzione per riposizionare cursore

Messaggio 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 :)
Ultima modifica di edgy il sabato 16 giugno 2007, 21:59, modificato 1 volta in totale.
Avatar utente
TonT
Prode Principiante
Messaggi: 156
Iscrizione: venerdì 1 settembre 2006, 19:39
Località: là sui monti con annette

Re: C funzione per riposizionare cursore

Messaggio da TonT »

hum...può andar bene( se non trovo di meglio)  :D
grazie ;)

ps Non metto Risolto perchè se qualcuno ha qualche altro consiglio è ben accetto  ;D
...Ma io, senza legge, rubai in nome mio,
quegli altri, nel nome di dio...
max.achille
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 349
Iscrizione: venerdì 11 maggio 2007, 0:01

Re: C funzione per riposizionare cursore

Messaggio 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???
Avatar utente
menelicte
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 596
Iscrizione: lunedì 4 giugno 2007, 0:04

Re: C funzione per riposizionare cursore

Messaggio 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)
"Tentare è il primo passo verso il fallimento" Homer J.
Avatar utente
bite
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 3798
Iscrizione: sabato 19 maggio 2007, 22:10

Re: C funzione per riposizionare cursore

Messaggio 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
Avatar utente
TonT
Prode Principiante
Messaggi: 156
Iscrizione: venerdì 1 settembre 2006, 19:39
Località: là sui monti con annette

Re: C funzione per riposizionare cursore

Messaggio 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  ;D risolto mettendo un printf("    ");
Ultima modifica di Anonymous il domenica 17 giugno 2007, 17:00, modificato 1 volta in totale.
...Ma io, senza legge, rubai in nome mio,
quegli altri, nel nome di dio...
Avatar utente
Berghem
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 2265
Iscrizione: giovedì 14 aprile 2005, 22:28
Località: Dalmen

Re: C funzione per riposizionare cursore

Messaggio 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.....
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 2 ospiti