Gestione del cursore in una finestra console e matrix effect

di StaticKing il
50 risposte
Salve a tutti,
volevo sapere se esisteva un modo per sovrascrivere nella finestra dove viene eseguito il programma, invece che scrivere tutto di seguito, faccio un esempio:

printf("parola1 ");
printf("parola2");

viene scritto:
parola1 parola2

io voglio che venga scritto
parola1 e dopo un tot di tempo (uso la funzione Sleep()) SOPRA a parola1 parola2

Mi potete dire se è possibile e se si come posso fare? Grazie

50 Risposte

  • Prova con

    printf("\rparola2");
  • Ok ho provato e fa quello che volevo... così inizia a sovrascivere dall'inizio però, e se volessi sovrascivere da un determinato punto in poi? Esiste tipo un modo di scorrere la finestra dal primo punto in cui si può scrivere e poi dire di sorascrivere da lì?
  • Hai un'esigenza diversa da quella del titolo della discussione.

    A questo punto dovrai usare le API della gestione della console con Windows.
  • Cioè come dovrei intitolarla la discussione? Che così al massimo cambio titolo... E devo per forza usare queste API, non posso fare senza? In C::B ci sono già? Non ne ho un'idea e non so usarle, immagino che mi dovrò leggere qualcosa in giro a riguardo...
  • Il trucco piu' semplice e' utilizzare un carrige return '\r' invece di un new line '\n'.
    In alternativa, aggiungere alla console il supporto alle sequenze di escape, ed utilizzare le seqjenze di escape dei vecchi terminali ascii per posizionare il cursore. (ad esempio: ^[ESC1;1h per posizionare il cursore in alto a sinistra) . Oppure usare le API Windows
  • Gestione del cursore in una finestra console

    Per cui utilizzi la API

    SetConsoleCursorPosition


    e collegate.

    Le API sono funzioni messe a disposizione del sistema, non dipendono dal compilatore/IDE.
  • Oregon il link non funziona...

    migliorabile: come faccio ad aggiungere alla console il supporto alle sequenze di escape? E dove trovo una liste delle sequenze di escape dei vecchi terminali ascii?

    Mi sono guardato i caratteri di escape già presenti e ho fatto un paio di prove... correggetemi se sbaglio ma teoricamente anche solo coi caratteri

    \r va all'inizio della riga
    \f va avanti di un posto

    combinati nel modo giusto riesco a coprire tutta la finestra... o no?
  • StaticKing ha scritto:


    oregon il link non funziona...
    Era un problema del forum ... ho corretto.

    Lascia perdere le sequenze di escape ... use le API.
  • Va bene, mi guarderò le API, grazie a tutti
  • Anzi ho risolto ancora più semplicemente con la funzione suggerita da shodan, ho visto che fa quello di cui avevo bisogno, grazie ancora a tutti, ciao
  • StaticKing ha scritto:


    Anzi ho risolto ancora più semplicemente con la funzione suggerita da shodan
    Beh, quella funzione usa le API che avresti dovuto studiare tu ma che è stato fatto da altri ...

    Hai risolto ma non hai imparato.
  • Eccomi... sono io l'altro utente.

    Si, e' stata di notevole aiuto ed ho imparato ad utilizzarla per bene.

    ps.
    Se in modalita' console, si vuole rimanere sullo stesso rigo oppure scendere giu' di rigo, i comando sono banali:

    \t (avanti di un tab)
    \r (indietro inizio rigo)
    \n (va accapo sul rigo successivo)

    poi ho letto adesso di:

    \f (avanti di un carattere solo)

    ma ce ne sono tanti altri che fanno anche altre cose, come ad esempio:

    \a (emette un beep)

    piu' altri che ora non ricordo a memoria ma che basta leggere su qualche buon manuale. Sono comandi di console che vanno bene sia per il C che per il C++.
    Pero' come hanno gia' detto altri, se vuoi imparare bene a programmare, almeno farlo con scioltezza, il C come il C++ nonostante abbia meno comandi rispetto ad altri linguaggi di alto livello, tipo: se nel Pascal usi (if... then... else), nel C++ puoi usare soltanto (if... else), devi comunque studiarci sopra e fare esperimenti anche basandoti sui suggerimenti che ti danno nel forum, altrimenti impari cose a memoria senza capirle bene.
  • se nel Pascal usi (if... then... else), nel C++ puoi usare soltanto (if... else)

    ma sono la stessa identica cosa!
    L'unica differenza è che nel pascal il confronto viene messo tra if e then mentre nel c tra ()
Devi accedere o registrarti per scrivere nel forum
50 risposte