Visualizzazione dei risultati da 1 a 9 su 9

Discussione: [C++] Flushing stdin

  1. #1

    [C++] Flushing stdin

    Salve a tutti. Io in C, quando volevo svuotare il buffer di input facevo: fflush(stdin).
    In C++ non so come fare, ovvero ho visto che l'oggetto cin non ha un metodo che si chiami fflush(o qualcosa che gli assomigli).
    Sapete come posso fare?

  2. #2
    funziona anche in c++

    per fare una pulizia completa dello stream in c++ io uso:

    codice:
    cin.clear();     //riattiva il cin e cancella gli errori che sono avvenuti sul cin
    fflush(stdin);  //cancella il flusso in ingresso
    adesso sei sicuro di poter riutilizzare il cin e di avere il flusso in ingresso ripulito.

  3. #3
    Ma è comunque il fflush del C? Cioè devo comunque includere stdio.h?

  4. #4
    sinceramente non so se è lo stesso del c, comunque in c++ non serve l'inclusione di nessun header

  5. #5
    Ecco un piccolo esempio veloce...

    codice:
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        int a;
    
        bool ok=true;
        while(ok)
        {
        cout<<"inserisci a"<<endl;
        cin.clear();     //riattiva il cin nel caso di un errore nel flusso di ingresso
        fflush(stdin);  //svuota il flusso in ingresso
        cin>>a;
        bool d=cin.fail();
        cout<<d<<endl;
        }
        return 0;
    }

  6. #6
    Ok, grazie

    Ciao

  7. #7
    Non mischiare stream C e C++, usa piuttosto il metodo sync().
    codice:
    cin.sync();
    .
    Nota che, esattamente come accade con fflush, il suo effetto di svuotamento degli stream di input non è richiesto dallo standard, per cui in alcune implementazioni (solitamente le stesse in cui ciò accade anche con fflush) non ha alcun effetto.
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    Originariamente inviato da MItaly
    Non mischiare stream C e C++, usa piuttosto il metodo sync().
    codice:
    cin.sync();
    .
    Nota che, esattamente come accade con fflush, il suo effetto di svuotamento degli stream di input non è richiesto dallo standard, per cui in alcune implementazioni (solitamente le stesse in cui ciò accade anche con fflush) non ha alcun effetto.
    Bene, è proprio quello che cercavo. Grazie

  9. #9
    Di nulla; ciao!
    Amaro C++, il gusto pieno dell'undefined behavior.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.