Je suis essentiellement en train de créer ma propre console d'E/S, (donc pas de cout, cin, etc) mais parfois quand je lis l'entrée, je ne lis pas tous les caractères du tampon, car je peux sélectionner combien je veux lire, mais la prochaine fois que j'appelle ReadConsoleA/W()
il n'attend pas l'entrée de l'utilisateur car il lit ce qui reste dans le tampon. J'ai essayé FlushConsoleInputBuffer()
mais ça n'a pas fonctionné, voici essentiellement ce que j'ai :
#inlcude
// Ces variables globales sont juste à titre d'exemple
DWORD octets;
HANDLE in;
HANDLE out;
void WrtConsole(const char* texte, DWORD taille)
{
WriteConsoleW(out, texte, taille, &octets, 0);
}
void ReaConsole(char* texte, DWORD taille_max)
{
FlushConsoleInputBuffer(in);
ReadConsoleA(in, texte, taille_max, &octets, 0);
}
// J'utilise `int WINAPI mainCRTStartup()`, mais cela n'a pas d'importance, je n'utilise pas de choses iostream.
int main()
{
out = GetStdHandle(STD_OUTPUT_HANDLE);
in = GetStdHandle(STD_INPUT_HANDLE);
char num1[4];
char num2[4];
WrtConsole(L"Premier nombre : ");
ReaConsole(num1, 4);
WrtConsole(L"Deuxième nombre : ");
ReaConsole(num2, 4);
// ...
}
Maintenant, par exemple, si l'utilisateur tape un nombre à 3 chiffres, comme 100, la fonction ReadConsole()
va lire '1','0','0','\r' mais va laisser le '\n' dans le tampon d'entrée, causant ainsi l'effet de saut à l'appel suivant à ReadConsole()
.
Comme je l'ai dit, FlushConsoleInputBuffer()
n'a pas fonctionné, donc, comment puis-je vider le tampon d'entrée de la console afin que l'appel suivant à ReadConsole()
ne soit pas "sauté"?