std::cin Eingabepuffer leeren
-
Hey!
Ich bekomm das einfach nicht hin! Habe von ignore(), clear() über sync() bis hin zu rdbuf()->blabla alles ausprobiert.
Wie lösche ich den Eingabepuffer von std::cin?
Ich frage eine Eingabe nach einer bestimmten Länge ab, stimmt diese nicht, wird eine Nachricht ausgegeben, 4 Sekunden per Sleep() gewartet und wenn man währenddessen etwas eingibt, wird das dann beim nächsten std::cin angezeigt. Das will ich aber nicht.
MfG
-
tjo ... ehm warte lass überlegen ... wir könnten nen failbit gesetzt haben? evt. ok ... also brauchen wir clear. Hmm dann soll der uns mal alles rauswerfen was wir nichtmehr brauchen!
std::cin.sync(); std::cin.clear(); std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
-
1>c:\data\c++\tests\minigame\minigame\core.cpp(37) : warning C4003: not enough actual parameters for macro 'max' 1>c:\data\c++\tests\minigame\minigame\core.cpp(37) : error C2589: '(' : illegal token on right side of '::' 1>c:\data\c++\tests\minigame\minigame\core.cpp(37) : error C2143: syntax error : missing ')' before '::' 1>c:\data\c++\tests\minigame\minigame\core.cpp(37) : error C2059: syntax error : ')'Und mit
std::cin.sync(); std::cin.clear(); std::cin.ignore(std::numeric_limits<std::streamsize>::max, '\n');haben wir
cannot convert parameter 1 from 'std::numeric_limits<int>::_Ty (__cdecl *)(void) throw()' to 'std::streamsize'MfG
-
ceplusplus@loggedoff schrieb:
1>c:\data\c++\tests\minigame\minigame\core.cpp(37) : warning C4003: not enough actual parameters for [b]macro 'max'[/b]falls du <windows.h> inkludierst, definiere vorher das Makro NO_MINMAX.
-
Hat nix gebracht.
-
ceplusplus@loggedoff schrieb:
Hat nix gebracht.
Dann finde den Übeltäter der das Makro max definiert, das macht den Ausdruck im Zusammenhang mit numeric_limits kaputt. Wenn's nicht windows.h ist können wir nicht wissen welcher das sein könnte.
-
camper schrieb:
ceplusplus@loggedoff schrieb:
1>c:\data\c++\tests\minigame\minigame\core.cpp(37) : warning C4003: not enough actual parameters for [b]macro 'max'[/b]falls du <windows.h> inkludierst, definiere vorher das Makro NO_MINMAX.
NOMINMAX IMHO
-
std::cin.sync(); std::cin.clear(); std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');... sollte eigentlich gehen ... die Header:
#include <iostream> // std::cin #include <limits> // std::numeric_limits #ifdef max #undef max #endif // max...
-
Mit NOMINMAX wird nun kompiliert, jedoch muss ich nun 1. zwei mal Enter drücken und 2. wird der Eingabepuffer noch immer nicht geleert...
Hab den code sowohl vor cin als auch nach cin versucht.
Da habt ihr mal den ursprünglichen code:
while(player.getName().empty()) { ic::con.clearText(); ic::con.setCurPos(0, 0); std::cout << "***** :-) Welcome to Brchi's great network MiniGame (-: ****" << std::endl << std::endl; std::cout << "What's your name, stranger?" << std::endl; std::string name; std::getline(std::cin, name); if(name.length() < 3 || name.length() > 20) { ic::con.clearText(); ic::con.setCurPos(0, 0); redOut("Your name must have at least 3 and at most 20 characters!"); Sleep(4000); } else player.setName(name); }Was könnte ich noch versuchen? Wiegesagt, wenn ich während der Nachricht "Your name must have...." Zeichen tippe, erscheinen die dann beim nächsten cin...
MfG
-
1. ich vermute, du fährst das visual studio .. dann hast du es nicht gepatch 't, heißt: getline hat das doppelte enter problem. (ich weiß nicht, ob die msdn den patch link noch zur verfügung stellt für das studio, such mal...)
(hier ein handfix, aber vorsicht...)
http://people.msoe.edu/~taylor/resources/msvc60.htmstd::cin.clear();
std::cin.ignore(std::numeric_limitsstd::streamsize::max(), '\n');müssen vor die neue eingabe (hier: getline). damit 'öffnest' du erst den buffer und holst im nächsten schritt alle noch verbliebenenzeichen raus bis zum '\n' (also das eingegebene return).
-
Falls du immer noch VC++ 6 fährst, ist es Zeit auf VC++ 2005 Express Edition umzusteigen - vollkommen kostenlos.
Falls du unbedingt VC++ 6 weiterbenutzen möchtest findet sich der Patch hier: http://fara.cs.uni-potsdam.de/~kaufmann/?page=Programming&ProgKNr=1#Code -> STLFix
MfG SideWinder
-
den patch bei hume hab ich eben wie wahnsinnig gesucht *g*
-
Danke, aber ich benutze VC++ 2005 Express...