Không xóa được bộ đệm bàn phím khi sử dụng thư viện windows.h trong c++

chào các bạn
mình cần dùng thư viện windows.h để sử dụng hàm
GetAsyncKeyState(VK_DOWN)
GetAsyncKeyState(VK_UP)
GetAsyncKeyState(VK_RETURN)

nhưng sau khi dung các hàm này, trong bộ đệm máy tính sẽ chưa các phím nhập vào
giống như khi ta nhập 1 số xong bấm enter
sau đó nhập 1 xâu mà k xóa bộ đệm thì kí tự enter sẽ được nhận vào xâu

mình dùng các hàm xóa bộ đệm như
fflush(stdin);
cin.clear();
cin.ignore();

string temp;
getline(cin, temp);

trước khi nhập xâu mới như vẫn không được, xâu mới vẫn nhận kí tự đã được lưu trong bộ đệm trước đó do sử dụng các phím mũi tên trên
giờ phải làm thế nào để xóa được bộ đệm do các hàm trong windows.h sinh ra?
xin cam on

help help :smile:
help help :smile:

thử cái này
FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE));

ko được thì bó tay.com

1 Like

:frowning: vẫn k được , sau khi mình dùng các phím mũi tên để di chuyển để dòng cần bấm enter thì bộ đệm nó lưu lại
các hàm xóa bộ đệm kia k xóa được,
nên khi nhập dữ liệu cho 1 biến string mới
thì nó bị lỗi ghi nhận luôn kí tự trong bộ đệm vào biến string
mà chỉ bị lỗi ở lần nhầm đầu tiên
từ lần thứ 2 thì k bị

:wink: mình kết hợp các hàm
FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE));
string rac;
getline(cin, rac);

thì lại được
nhưng được có thể là do số lần bấm phím mũi tên ít

chịu. Muốn được thì chắc phải xài GetAsyncKeyState. gì thế cin luôn, nghĩa là bấm 1 phím thì tương đương thêm 1 ký tự vào chuỗi input…

nãy mình dùng
FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE));
string rac;
getline(cin, rac);
được nhưng mà giờ lại k thể quay lại sử dụng menu tiếp
mà nó lại bắt nhập tiếp phần tử khác :V

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?