Bonjour à tous,

Dans le cadre de nos études nous avons un exercice sur les chaines de caractères que nous n'arrivons pas a terminer (nous bloquons dessus depuis 4-5 jours).

L'énoncé est le suivant :
Ecrire un programme qui effectue des saisies de chaînes de caractères répondant à certains
formats. Le programme doit définir et appeler une série de fonctions « lire... » qui permettront de
récupérer, via getchar() (uniquement !), par paramètre, des chaînes formatées et de les afficher
toutes, en fin de programme. Les fonctions attendues doivent permettre de saisir (et vérifier) :
- un "réel positif ou nul" composé de maximum n (paramètre) chiffres avant la virgule et de maximum
m (paramètre) chiffres après la virgule. Le séparateur partie entière/décimale est un caractère
passé en paramètre. Un code d'erreur est retourné si la chaîne saisie ne correspond pas à ces
critères.

Après avoir posé des questions j'ai obtenu les informations suivantes en plus de l'énoncé :
-Les étapes ) suivre sont les suivantes :
1. Remplir la chaine
2. Vérifier la 1ere partie (entière)
3. Vérifier le séparateur (reçu dans la fonction par paramettre)
4. Vérifier la dernière partie (décimale)

Voici le code que nous avons fait mais il ne vérifie pas ...
Toute aide serait la bienvenue.
Merci d'avance à tous,

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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int flottant(int, int, char*, char*);
 
int main()
{
 
    char chaine[50];
    int n = 4;
    int m = 4;
    char v[2] = {',', '\0'};
 
    int k;
 
    printf("\nEntrez le nombre : ");
 
    k = flottant(n, m, &v, &chaine);
 
    printf("\nVoici la chaine : %s- FIN", chaine);
    printf("\nVoici le resultat (0 pour ok, >0 pour pas ok : %d", k);
 
 
    return 0;
}
 
int flottant(int n, int m, char *v, char *chaine)
{
 
    char c;
 
 
    fflush(stdin);
    c = getchar();
    int i=0, k = 0;
    while ((i < 15) && (c != '\n'))
    {
        *chaine = c;
        chaine++;
        i++;
        c = getchar();
    }
    *chaine = '\0';
 
    i=0;
    printf ("Avant boucle i = %d, n = %d et m = %d\n", i, n, m);
    while ((i < n) || (*chaine != '\0'))        /*On va chercher la partie entière et le séparateur */
    {
        if (*chaine == '0'|| *chaine == '1' || *chaine == '2' || *chaine == '3' || *chaine == '4' || *chaine == '5' || *chaine == '6' || *chaine == '7' || *chaine == '8' || *chaine == '9'|| *chaine == '\0' || *chaine == '.')
        {
            printf ("Boucle 1 IF i = %d\n", i);
 
        }
        else
        {
            k++;
            i=n+m+1;
            printf ("Boucle 1 ELSE i = %d", i);
        }
        chaine++;
        i++;
    }
 
       while ((i < n + m + 1) || (*chaine != '\0'))
    {
        if (*chaine == '0'|| *chaine == '1' || *chaine == '2' || *chaine == '3' || *chaine == '4' || *chaine == '5' || *chaine == '6' || *chaine == '7' || *chaine == '8' || *chaine == '9'|| *chaine == '\0')
        {
            printf ("Boucle 2 IF i = %d\n", i);
 
        }
        else
        {
            k++;
            i=n+m+1;
            printf ("Boucle 2 ELSE i = %d", i);
        }
        chaine++;
        i++;
    }
 
int z;
 
    /*for(i = 0; i < n || c != '\n'; i++, chaine++)
    {
        //c = getchar;
        if((c <= '0' || c >= '9') || (c != *v) || (c != '\o'))
            *chaine = c;
        else
            k++;
 
        c = getchar;
    }
 
    for(i; i < (n + m + 2) || c != '\n'; i++, chaine++)
    {
        //c = getchar();
        if((c < '0' || c > '9') || (c != *v))
            *chaine = c;
        else
            k++;
 
        c = getchar;
    }
        *(chaine-1) = '\0';*/
 
    return k;
}