Frage zur Verwenung von sync() und clear()



  • Tag die Herren (und ggf. auch Fragen),
    ich habe eine kurze Frage zur Verwenung von cin.sync() und cin.clear(). Sollte man das nicht eigentlich immer verwenden, um so unerwünschten Pufferinhalt, der vielleicht sogar zu einem Laufzeitfehler führen kann? Das würde natürlich den Code erheblich vergrößern, wenn man häufig Eingaben macht.

    Wie macht ihr das?

    Vielen Dank für eure Tipps.
    lg, freakC++



  • für die erklärung von cin.clear sollte das schonmal weiterhelfen:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-187179.html

    ich persönlich benutze cin.clear() so gut wie nie.

    der pufferinhalt führt eigentlich nur dann zu einem laufzeitfehler wenn man z.B. einen falschen variablentypen eingibt (z.B. bei int a; cin>>a; einen buchstaben).

    wenn man cin.clear() verwendet macht es eigentlich nur im zusamennhang mit

    if(cin.fail()) { }
    

    Sinn da man ja vorher nicht weiß ob der user zur laufzeit eine falsche eingabe machen wird.

    beispiel für die verwendung:

    int a;
    cin>>a;
    if(cin.fail())//z.B. buchstabe eingegeben
    {
    cout<<"fehler\n";
    cin.clear();//löscht falsche eingabe aus puffer um laufzeitfehler zu vermeiden
    }
    

    wenn man keinen eingabefehler macht muss man cin.clear() eigentlich nicht benutzen, denn da müsste man schon sehr sehr viele eingaben machen (was man in einem programm mit normaler länge so gut wie nie tut) um einen solchen fehler zu verursachen(ist mir auch noch nie passiert trotz langer programme).

    was cin.sync() betrifft: keine ahnung, habe ich noch nie verwendet.

    mfg,
    andi01.



  • Hallo,
    vielen Dank für deine Antwort. SIe hat mich schon ein Stüclk weitergebracht. Ich habe diese beiden Methonden gerade in meinem Buch kennegelertn und wollte so prüfen, ob sie es wert sind, gelernt zu werden.

    Bis bald
    lg, frakC++



  • Hi,
    also ich habe das jetzt nochmal genau nachgeschaut:
    cin.clear() löscht nur sog. fehlerflags, d.h. nur falscheingaben wenn ein fehler aufgetaucht ist, cin.sync() löscht alle noch nicht ausgelesenen variablen (also unbenutzte) aus dem puffer.

    hier nochmal die genaue diferrenzierung:

    für cin.clear():

    int a;
    cin>>a;
    if(cin.fail())//z.B. buchstabe eingegeben
    {
    cout<<"fehler\n";
    cin.clear();//löscht falsche eingabe aus puffer um laufzeitfehler zu vermeiden
    }
    

    für cin.sync:

    if (cin.good())    //wenn alles ok war    
    {                        
    cin.sync();  /*löscht (meist jedoch überflüssig) alle noch ungelesenen variablen aus dem puffer um eventuelle laufzeitfehler zu vermeiden*/
    break;     
    }
    

    cin.sync() verwendet man also im zusammenhang mit

    if(cin.good())
    

    um alle ungelesenen variablen aus dem puffer zu entfernen, cin.clear() um fehlerhafte eingaben zu löschen im zusammenhang mit

    if(cin.fail())
    

    mfg,
    andi01.



  • Hallo,
    die Methoden good und fail kannte ich ich noch gar nicht! Vielen Dank für die genaue Darstellung! 👍

    Vielen Dank
    lg, freakC++


Anmelden zum Antworten