Bonjour,

Mon code devrait me permette d'obtenir une somme prédéfinie en additionnant des nombres que l'on entre en mémoire dans un tableau, après en avoir demandé la taille.
Par exemple, si j'ai 3 nombres, (prenons 20, 2 et 14) et que je souhaite obtenir la somme 34, alors le programme me renvoie 20 et 14.
Un problème d'origine inconnue survient pourtant lorsque je saisis comme nombre "10.10, 20.10 et 3.8". Il est alors incapable de me dire que je peux obtenir le bon total en additionnant les 3 nombres.

J'ai déjà essayé de remplacer mes float par des double, mais ça a empiré les choses. Si je place des int, alors tous les nombres que j'entre dans mon tableau se transforment en 0.00

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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#include <stdio.h>
#include <stdlib.h>
 
int main(int argc, char *argv[])
{
    float Somme = 0.00 ;
    float Total = 0.00 ;
/***************************************************************/
/**                                                                               **/
/**      La variable "Mt" signifie Montant.                     **/
/**      Pour augmenter la lisibilité, on peut remplacer  **/
/**      tous les "Mt" par le terme "Montant"                 **/
/**                                                                               **/
/***************************************************************/    
    int n=0;
 
    int NombreDeFactures = 0;
    int i=0;
    float* Mt = NULL; // Ce pointeur servira de tableau après l'appel du malloc
 
    // On demande le nombre de factures
    printf("Combien de factures dans ce mois ? ");
    scanf("%d", &NombreDeFactures);
 
    printf("Quelle est le total a obtenir?\n");
    scanf("%g", &Total);
 
    if (NombreDeFactures > 0) // Il faut qu'il ait au moins une facture 
    {
        Mt = malloc(NombreDeFactures * sizeof(float)); // On alloue de la mémoire pour le tableau
        if (Mt == NULL) // On vérifie si l'allocation a marché ou pas
        {
            exit(0); // On arrête tout
        }
 
        // On demande le Mt des factures une à une 
        for (i = 0 ; i < NombreDeFactures ; i++)
        {
            printf("Entrer le montant de la facture %d : ", i);
            scanf("%g", &Mt[i]);
        }
 
        // On affiche les factures stockées, une à une
        printf("*****************************************************************************\n");
        printf("*  A but verificatif, les montants des factures du mois sont les suivants : *\n\n");
        for (i = 0 ; i < NombreDeFactures ; i++)
        {
            printf("%10.2f CHF\n", Mt[i]);
        }
 
        switch (NombreDeFactures)
        {
           case 1:
                Somme=Mt[0];
                if (Somme!=Total)
                {
                printf("Mt = %f \n", Somme);
                printf("Ce n'est donc pas la bonne facture \n");
                }
                else
                {
                printf("Mt ( %f ) équivalent au total ( %f ) \n", Somme, Total);
                printf("C'est donc la bonne facture \n");
                }
                break;
           case 2:
                if (Total==Mt[0])
                {
                printf("Somme = %f \n", Mt[0]);
                printf("C'est la bonne facture \n");
                printf("Il s'agit du Mt 0 \n");
                }
                else if (Total==Mt[1])
                {
                printf("Somme = %f \n", Mt[1]);
                printf("C'est la bonne facture \n");
                printf("Il s'agit du Mt 1 \n");
                }
                else if (Total==Mt[0]+Mt[1])
                {
                printf("Somme = %f \n", Mt[0]+Mt[1]);
                printf("C'est la bonne facture. Il est possible d'obtenir le total voulu avec 2 Mts \n");
                printf("Ce sont les montants 0 et 1 \n");
                }
                else
                {
                printf("Il n'est pas possible de parvenir au total voulu avec ces 2 Mts\n");
 
                }
                break;
           case 3:
                if (Total==Mt[0])
                {
                printf("Somme = %g \n", Mt[0]);
                printf("C'est la bonne facture \n");
                printf("Il s'agit du Mt 0 \n");
                }
                else if (Total==Mt[1])
                {
                printf("Somme = %g \n", Mt[1]);
                printf("C'est la bonne facture \n");
                printf("Il s'agit du Mt 1 \n");
                }
                else if (Total==Mt[2])
                {
                printf("Somme = %g \n", Mt[2]);
                printf("C'est la bonne facture \n");
                printf("Il s'agit du Mt 2 \n");
                }
                else if (Total==Mt[0]+Mt[1])
                {
                printf("Somme = %g \n", Mt[0]+Mt[1]);
                printf("Il est possible d'obtenir le total voulu avec 2 Mts \n");
                printf("Ce sont les montants 0 et 1 \n");
                }
                else if (Total==Mt[0]+Mt[2])
                {
                printf("Somme = %g \n", Mt[0]+Mt[2]);
                printf("Il est possible d'obtenir le total voulu avec 2 Mts \n");
                printf("Ce sont les montants 0 et 2 \n");
                }
                else if (Total==Mt[1]+Mt[2])
                {
                printf("Somme = %g \n", Mt[1]+Mt[2]);
                printf("Il est possible d'obtenir le total voulu avec 2 Mts \n");
                printf("Ce sont les montants 1 et 2 \n");
                }
                else if (Total==Mt[0]+Mt[1]+Mt[2])
                {
                printf("Somme = %g \n", Mt[0]+Mt[1]+Mt[2]);
                printf("Il est possible d'obtenir le total voulu avec 3 Mts \n");
                printf("Ce sont les montants 1 et 2 et 3\n");
                }
                else
                {
                printf("Il n'est pas possible de parvenir au total voulu avec ces 3 Mts\n");
                }
                break;
            default:
                printf("Si possible supprimer quelques Mts ne permettant visiblement pas d'atteindre le bon total. \n");
                printf("La limite de 40 factures a en effet ete depassee\n");
                break;
        }
 
        // On libère la mémoire allouée avec malloc, on n'en a plus besoin
        free(Mt);
    }
    system("PAUSE");	
    return 0;
}
D'avance merci à celui qui saura trouver le problème.

Salutations,

Lysen