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 46 47 48 49 50 51
| #include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
#define LONG 10
int lectureclavierf(char const *format, ...);
// comme un scanf mais sécurisé : vide le buffer complétement puis analyse les données
char * lectureclavier();
// renvoie tout ce qui est dans le buffer après l'appui de la touche entrée
#define N 26
[...]
lectureclavierf(char const *format, ...)
{
int n;
char * chn;
va_list va;
va_start (va, format);
chn=lectureclavier();
n = vsscanf(chn, format, va);
va_end(va);
free(chn);
return n;
}
char * lectureclavier()
{
char * chn ;
size_t l=LONG;
chn=(char *)malloc(l);
fgets(chn,LONG,stdin);
while (strchr (chn, '\n')==NULL)
// tant qu'on n'a pas saisie la fin de chaîne, on le cherche
{
l+=LONG;
chn=(char *)realloc(chn,l);
fgets(chn+l-LONG-1,LONG+1,stdin);
// astuce : il faut penser qu'à la fin du précédent fgets
// on a mis un 0, il faut partir de là, ceci implique de
// récupérer un caractère de plus
};
return chn;
} |
Partager