Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Czyszczenie wejścia konsoli funkcją FlushConsoleInputBuffer

Ostatnio zmodyfikowano 2015-01-23 17:00
Autor Wiadomość
czosnek17
Temat założony przez niniejszego użytkownika
Czyszczenie wejścia konsoli funkcją FlushConsoleInputBuffer
» 2015-01-22 21:07:19
W skrócie
C/C++
Sleep( 3000 );
cin >> x;
gdy program dojdzie do cin>>, to w konsoli pojawi się to, co było wpisywane podczas spania.
Myślę, że rozwiązanie leży w WinAPI. Ale nic nie znalazłem.
//dobra, nie działała mi funkcja FlushConsoleInputBuffer i dowiedziałem się, że
Uchwyt do bufora wejściowego konsoli. Uchwyt musi mieć dostęp GENERIC_WRITE
http://cpp0x.pl/dokumentacja​/WinAPI/FlushConsoleInputBuffer​/1566
Jak mu dać ten dostęp?
P-125398
Fireho
» 2015-01-22 21:20:33
Może po prostu użyj cin.clear()?
P-125399
czosnek17
Temat założony przez niniejszego użytkownika
» 2015-01-22 21:28:05
cin.clear() jest od strumienia C++usowego, a mi chodzi o tekst zalegający na wejściu konsoli.
P-125400
pekfos
» 2015-01-22 21:54:41
Może po prostu użyj cin.clear()?
Nie ta metoda.

Jak mu dać ten dostęp?
Co ty tu niby chcesz dawać? Uchwyt i/o konsoli ma domyślnie prawa GENERIC_WRITE i GENERIC_READ.

PS: Taka ciekawostka/bład msdn/oba:
https://msdn.microsoft.com​/en-us/library/windows/desktop​/ms684199%28v=vs.85%29.aspx
[FlushConsoleInputBuffer] Discards all unread events in the input buffer. To use this function, the specified input buffer handle must have the GENERIC_READ access right.
https://msdn.microsoft.com​/en-us/library/windows/desktop​/ms683147%28v=vs.85%29.aspx
A handle to the console input buffer. The handle must have the GENERIC_WRITE access right.
P-125401
czosnek17
Temat założony przez niniejszego użytkownika
» 2015-01-22 22:07:33
To nie wiem co się dzieje.
C/C++
#include <iostream>
#if       _WIN32_WINNT < 0x0500
#undef  _WIN32_WINNT
#define _WIN32_WINNT   0x0500
#endif
#include <windows.h>
using namespace std;

int main()
{
    int x;
    Sleep( 2000 );
    if( FlushConsoleInputBuffer( GetConsoleWindow() ) )
         cout << "ok\n";
    else
         cout << "error\n";
   
    cout << GetLastError() << endl;
    cin >> x;
   
    return 0;
}
Jest błąd a wejście nie znika.
P-125402
pekfos
» 2015-01-22 22:12:38
Masz podać uchwyt z GetStdHandle(), a nie uchwyt okna.
P-125403
czosnek17
Temat założony przez niniejszego użytkownika
» 2015-01-23 17:00:55
Trzeba było tak
C/C++
FlushConsoleInputBuffer( GetStdHandle( STD_INPUT_HANDLE ) );
Dzięki, zamykam.
P-125433
« 1 »
  Strona 1 z 1