vai alla riga precedente dopo scanf () in C

considerate questo codice:

#include<stdio.h>

void main()
{
    char a;
    printf("scan: ");
    scanf("%c",&a);
    printf("\b back");
}

dopo che l’utente preme Invio e fa scendere il cursore, voglio spostarlo di nuovo in modo da poter stampare la parola “indietro” sovrascrivendo la parola “scansione”. come faccio a farlo?

EN From: Go to previous line after scanf() in C

More similar articles:

26 Comments

  1. con buffered input, questo potrebbe non essere possibile. potrebbe essere necessario effettuare una chiamata di sistema per cancellare lo schermo: system("cls");.

  2. è possibile utilizzare le sequenze di escape ANSI: \033[<N>A, dove <N> sarebbe la quantità di linee è necessario andare su (in questo caso, uno), quindi il codice sarebbe simile a questo:

    #include<stdio.h>
    
    main(void) {
        char a;
        printf("scan: ");
        scanf("%c",&a);
        printf("%c[1A back", 033);
    }

    inoltre, non si dovrebbe dichiarare principale come void. si prega di notare che le sequenze di escape non funzionano in alcuni terminali (come Windows cmd.exe o DOS senza ANSI.SYS installato).

    system("cls") sarebbe il metodo peggiore per risolvere il problema, e l’installazione di ncurses solo per spostare il cursore verso l’alto è overkill totale, perché hai sempre questa semplice soluzione che ho presentato sopra.

    ogni volta che si desidera leggere di più sulle sequenze di escape ANSI, controllare questo. se si desidera riavvolgere cursore alla fine della linea, controllare questo:

    #include<stdio.h>
    
    main(void) {
        char a;
        printf("scan: ");
        scanf("%c",&a);
        printf("%c[1Ascan: %c back", 033, a);
    }

    devi ricreare il contenuto della linea, tho. ma non dovrebbe essere troppo problematico. può essere reso più facile con l’uso più avanzato di sequenze di escape ANSI, che è possibile controllare in link fornito.

    1. si verifica questo comportamento, perché il terminale non supporta fughe ansi. alternativa per le finestre sarebbe ConEmu, ANSICon, o Hyper.

    2. non c’è alcuna regola implicita in C. È stato deprecato per un bel po ‘di tempo, e ora è rimosso per sempre. per favore, non è più il 1988.

    3. se il tuo compilatore non ti avverte dell’int implicito, allora o è molto vecchio o non stai abilitando avvertimenti comuni. nessuna di queste è desiderabile.

    4. @n.m. Sto usando C89 perché è più portatile, cercando di sbarazzarsi di abituarsi implicita int tho. STD = c89 rimuove questo avvertimento.

    5. @KrzysztofSzewczyk — con gcc -std=c89 -Wall c’è: warning: il tipo di ritorno predefinito è “int” [-Wreturn-type].

    6. si prega di risolvere la risposta. non è corretto come Faras lo standard C va. c’è solo uno standard C in effetti, quello corrente. essere corretto rispetto ad esso è un requisito. essere corretti rispetto alle edizioni obsolete dello standard è un bonus aggiunto. nemmeno parlando di usare un buon stile. int implicito è uno stile orribile indipendentemente dalla correttezza.

    7. @n.m. OP non ha specificato lo standard C, posso usare quello che voglio. se vuoi “migliorare” la risposta, modificala.

    8. il codice non funziona comunque così non molto miglioramento può essere fatto. se insistete sulla programmazione contro uno standard obsoleto e sull’uso di idiomi obsoleti, è giusto. tali programmi sono stati tutti bene nel 1998, sono solo non standard e non guardare bene oggi, questo è tutto.

    9. il codice funziona solo per i terminali ANSI, che si conosce e si riconosce. op sta usando una vecchia console Windows, che non è un terminale ANSI, quindi il codice non funziona per OP.

  3. non lo fai. basta non farlo. non è necessario. l’utente vuole vedere quello che ha digitato. non c’è un buon modo per farlo comunque.

Leave a Reply

Your email address will not be published. Required fields are marked *