1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
#include <iostream>
#include <string>
#include <windows.h>
class hardio //class inline d'entrée de données
{
private:
DWORD mode; //mode initial
DWORD nmode; //mode modifié
HANDLE console; //Handle de la console
char test[BUFSIZ]; //tampon mémoire
DWORD bufs; //nombre de caractères lu
public:
hardio()
{
static int instance=0;
if (instance>0)
throw "Instance multiple"; //on interdit les instances multiples
else
instance++;
console=GetStdHandle(STD_INPUT_HANDLE); //on récupère le HANDLE
GetConsoleMode (console, &mode); //on récupère le mode
nmode=mode & ~ENABLE_PROCESSED_INPUT; //on calcul le nouveau mode
}
~hardio()
{
SetConsoleMode (console,mode); //remise à défaut du mode;
}
friend std::string operator >> (hardio h, std::string& s)
{
SetConsoleMode (h.console, h.nmode); //on change le mode console
ReadConsole(h.console,h.test,BUFSIZ,&(h.bufs),NULL); //on charge le buffer clavier
std::cout<<char(10)<<char(13); //on dessend et on revient à la ligne
SetConsoleMode (h.console, h.mode); //on revient à l'ancien mode console
s=""; //initialisation du string (ecrase l'ancienne valeur)
for (int i=0;i<2*(int(h.bufs)-1);i=i+2) //pas de 2, structure "caractère+espace"
s+=h.test[i]; //ajout au string du caractère
return s; //renvoie du string
}
}; |
Partager