Visualizzazione dei risultati da 1 a 8 su 8

Hybrid View

  1. #1
    Il comportamento di fflush(stdin) non è definito dallo standard. Praticamente nessuna combinazione di compilatore e SO la supporta, se si parla di mainstream.
    L'idioma più standard e portabile è il seguente, fornito in via del tutto eccezionale, poiché trattasi davvero di una FAQ che ricorre centinaia di volte su ogni forum, incluso il presente:

    codice:
    void kbd_clean(void)
    {
        register char ch;
        do 
        {
            ch = getchar();
        } while (('\n' != ch) && (EOF != ch));
        /* 
        ** Alternativamente, piu' in sintesi: 
        ** while ((ch = getchar() != '\n') && (ch != EOF));
        */
    }
    • Un plauso a Grisha Perelman, raro esempio di genuino anticonformismo umano e scientifico.

  2. #2
    Quote Originariamente inviata da M.A.W. 1968 Visualizza il messaggio
    Il comportamento di fflush(stdin) non è definito dallo standard. Praticamente nessuna combinazione di compilatore e SO la supporta, se si parla di mainstream.
    L'idioma più standard e portabile è il seguente, fornito in via del tutto eccezionale, poiché trattasi davvero di una FAQ che ricorre centinaia di volte su ogni forum, incluso il presente:

    codice:
    void kbd_clean(void)
    {
        register char ch;
        do 
        {
            ch = getchar();
        } while (('\n' != ch) && (EOF != ch));
        /* 
        ** Alternativamente, piu' in sintesi: 
        ** while ((ch = getchar() != '\n') && (ch != EOF));
        */
    }
    Cioè ogni volta che richiedo un carattere in entrata, lo metto nel do while come hai detto?
    Non so cosa siano void, kbd_clean ed EOF, ma suppongo di potermene disinteressare per il momento, finche non li vedrò nel,libro.
    Il mio libro peraltro suggerisce di usare scanf("%c", &pausa), dove pausa è una variabile ausiliaria, ma non fa mai esempi a riguardo.
    Ho provato a metterlo dopo ogni scanf vero e ottengo strani risultati.

    Grazie per la pazienza!
    METAL IS MY WAY FOREVER

  3. #3
    Caro guerriero del metallo, quel che devi fare è richiamare la funzione kbd_clean() definita esattamente come sopra, ovviamente fuori dal main(), ogni volta che useresti la fflush(stdin) (che, ripeto, non funziona).
    • Un plauso a Grisha Perelman, raro esempio di genuino anticonformismo umano e scientifico.

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.