I am learning C++as we speak so forgive me if I am wrong as this is just an idea.
What if you put cin.clear() right before hand. If I am not mistaken you are correct about it reading your previous returns. So if you cleared cin, it would not have any previous returns in there.
If the function succeeds, the return value specifies whether the key was pressed since the last call to GetAsyncKeyState, and whether the key is currently up or down. If the most significant bit is set, the key is down, and if the least significant bit is set, the key was pressed after the previous call to GetAsyncKeyState.
I think you want to look at the most significant bit only.