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
|
#include <stdio.h>
#include <stdarg.h>
#include <string.h>
void input (char *format, ...)
{
int i;
char seq[] = "%*[^\n]";
char *ptn = format;
/*
* On cherche le nombre d'assignement
* pour verifier la sortie du vscanf
*/
for (i = 0; (ptn = strchr (ptn, '%')); ++i)
{
/* si le pointeur est null, alors il
* n'y a plus d'assignement
*/
if (ptn == NULL)
break;
else
{
ptn++;
/* si le '%' est suivi d'un '*'
* ou d'un 'n', il n'y a pas
* d'assignement
*/
if (*ptn == '*' || *ptn == 'n')
i--;
}
}
va_list v_arg;
va_start (v_arg, format);
/* tant que la saisie n'est pas bonne, on recommence */
while (i != vscanf (format, v_arg))
{
printf ("Try again: ");
scanf (seq); /* on vide le buffer */
getchar(); /* on enleve le '\n' restant */
}
scanf (seq);
getchar ();
va_end (v_arg);
} |
Partager