std::cin Eingabepuffer leeren
-
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...