cin.sync() und cin.clear()
-
Hallihallo
Stimmt es, dass mitcin.sync() cin.clear()
all dies gelöscht wird, was von der Tastatur eingelesen wurde oder liege ich falsch? Und was versteht man unter "Eingabepuffer" (in Bezug auf cin.sync() und cin.clear() ???)
Kann mir das jeman erklären?
-
Haaaaaalooooooo.....
Bin ich im falschen Forum oder warum antwortet ihr mir nicht???
Was bedeuten "Eingabepuffer" und cin.sync() und cin.clear()???
Profis wie ihr sollten das doch ohne Probleme beantworten können, oder täusche ich mich da
-
zocker001 schrieb:
Hallihallo
Stimmt es, dass mitcin.sync() cin.clear()
all dies gelöscht wird, was von der Tastatur eingelesen wurde oder liege ich falsch?
Du liegst falsch. Es gibt zwar Implementationen bei denen cin.sync() bewirkt, dass alle Zeichen im Eingabepuffer ignoriert werden, aber der Standard spezifiziert sync() nicht so. Vielmehr ist das Verhalten von sync() ausschließlich für Ausgabeströme spezifziert.
cin.clear() löscht die Fehlerbits des Streams und hat mit Eingabepuffern nichts zu tun.
-
Wenn du ein sicheres Abfragen einer Tastatureingabe meinst, dabei wird in C++ folgender Code verwendet:
#include <iostream> void wait() { std::cin.clear(); // Error Flags werden gelöscht, damit die Eingabe sicher erfolgen kann. std::streambuf* pbuf = std::cin.rdbuf(); std::streamsize size = pbuf->in_avail(); std::cin.ignore(size); // löscht alle Daten im Eingabepuffer std::cin.get(); // holt genau ein Zeichen aus dem Eingabepuffer } int main() { //... wait(); }
Einfacher gehts mit getch() aus conio.h
-
Les dir noch diesen Thread durch:
http://www.c-plusplus.net/forum/viewtopic.php?t=80672&highlight=cin+getHier ein kleines Workarround zu diesem Problem:
void clearCinBuf() { if(cin.rdbuf()->in_avail()) { cin.clear(); cin.ignore(cin.rdbuf()->in_avail()); cin.get(); } else { cin.sync(); cin.get(); } }
mfg
v R
-
Vielen Dank erst mal...
aber eine Frage habt ihr mir leider nicht erklärt:
Was ist ein "Eingabepuffer"???Ihr müsst wissen, dass ich noch ziemlich am Anfang von C++ stehe und in einem Buch, das ich mir zugelegt habe, nich alles genau beschrieben ist.
Mir ist aufgefallen, das manche Leute hier "std::cin.clear()" schreiben.
Was bedeutet dieses "std::". Hat es eine ähnliche Aufgabe wie:using namespace std;
Kann mir bitte jemand helfen???
PS:
Stellt euch schonmal drauf ein, dass ich bald mit dem nächsten Problem komme