Bonjour,

J'ai écris une fonction de saisie sécurisé que l'on utilise comme scanf, et qui utilise scanf, elle vide le buffer après la saisie et récupère le dernier \n, j'y ai inséré une boucle qui tourne tant que la saisie n'est pas bonne.

Ce que j'aimerai faire c'est inséré entre chaque format le format %n pour vérifier quelle saisie à planté.

Je vous poste le code commenté :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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);
}
J'ai aussi cette erreur à la compilation :
[misc] david $ cc input.c -Wall
input.c: In function ‘input’:
input.c:26: attention : implicit declaration of function ‘vscanf’
D'après le manuel (man vscanf), elle se trouve dans stdarg.h qui est inclue pourtant.

Cordialement, Link/DD