Hey Leute, ich habe eine Frage, nach der ich schon lange gesucht habe, ich habe viele Fragen gleich gesehen, aber keine hat mein Problem gelöst.C++ Clearing cin Puffer bei der Verwendung von GetAsyncKeyState()
Also habe ich eine Funktion, die den Spielernamen mit get-Linie ergreift, die so geht.
std::cout << "Enter your name"<< std::endl;
std::string input;
std::getline(std::cin, input);
und danach habe ich eine Funktion, die ein Menü hat, die den Benutzer sagt, dass er eine Reihe von Tasten drücken, um auf andere Teile des Menüs zu bewegen.
while(true)
{
//menu one
if(GetAsyncKeyState(VK_CONTROL))
{
Menu_3();
}
//here is the problem
if(GetAsyncKeyState(VK_SHIFT) && GetAsyncKeyState(0x53)) //0X53 = S
{
Menu_4();
}
}
Mein Problem ist, dass, wenn ich einen Namen mit einem Großbuchstaben verwenden (mit SHIFT erstellt) und einem ‚s‘ auch Menu_4() automatisch aufgerufen wird, nachdem ich den Namen, zB Namen „Shawn“ eingeben. Wenn ich nur einen Namen wie diesen "Shawn" habe (ohne Shift zu benutzen), dann scheint dieses "s" im cin-Puffer gespeichert zu werden und alles was benötigt wird um fortzufahren ist "shift" um in Menu_4() zu gelangen;
Im Grunde wird die Eingabe von der Getline-Namensanforderung übernommen und die Aufrufe von GetAsyncKeyState() durcheinander gebracht.
Danke für Ihre Hilfe.
Oh ich sehe, aber warum hast du einen xor da, was soll das denn definiert werden? Danke – user1143896
Ich habe es, ich musste GetAsyncKeyState (VK_SHIFT) & 0x8000, danke für Ihre Hilfe. – user1143896
'Xor 0x1' schaltet nur das LSB um, dies ist nicht korrekt. Und auch: MS dokumentiert das MSB und das LSB, MS sagt nichts über die Bits dazwischen aus. Selbst das Überprüfen von 'if (GetAsyncKeyState (...) & ~ 0x1)' ist im Falle zukünftiger API-Änderungen fehleranfällig. Überprüfen Sie 'GetAsyncKeyState (...) & 0x8000' ist der Weg zu gehen. –