Salut à tous,
J'ai essayé de coder la saisie de 3 floats contrôlés et bornés avec le code ci-après.
Le résultat est correct mais j'ai l'impression d'utiliser un semi-remorque pour transporter un pot de peinture.
Tous les avis et conseils seront les bienvenus.

L.P.

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
#include <iostream>  // Verifier si une valeur est un nombre. c++
#include <sstream>
#include <string>
#include <cmath>
using namespace std;
 
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    suite   ~~~~~~~~~~~~~~~~~~~~~~~~~~~
int suite()
{
 char x;
 int s;
    cout <<"\n   Choix (R) pour Recommencer (Q) pour Quitter  ", cin >> x ;
        cout << endl;
        int xx = x;
//                cout << "int de x : " << xx;
        if (xx == 82 || xx == 114){
            s=1;
        }
        else {
            s = 0;
        }
//                cout << "int de s : " << s;
        return s;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
string consolePause() // declenche la PAUSE avec la console en direct depuis l'.exe
{
    cout <<"\n       Press Enter to Exit . . .\n";
        cin.get();
            cin.clear();
return "";
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~~~~~   saisies   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
float saisies(int x)
{
 
bool r; // résultat des vérif
float i; // valeur float attendue
char ascii (96); // code ASCII -1 de 'a'
string cs = ""; // chaine saisie à convertir en float
string cr = ""; // chaine 's' aprés conversion en float et reconversion en string
int len_cs, len_cr; /* respectivement longueur de la chaine 's' initialement
                 saisie et longueur aprés la double conversion pour comparaison */
 
ascii = ascii + x ; // les valeurs ASCII de a, b et c
 
cout << "Valeur de " << ascii << " : "; getline (cin, cs);
    len_cs = cs.length();
//        cout<< "len de " << ascii << " : " << len_cs << endl; // pour vérif
istringstream istr(cs);
    if (istr >> i) r = 1; //  i=i+0;
//        cout << "resultat_1= " << r << endl; // pour vérif
//if (istr >> i) {cout << "La valeur de "  << ascii << " : "<< i+0 << endl; // pour vérif
 
 ostringstream oss;
    oss << i;
        cr=oss.str();
            len_cr = cr.length();
//            cout << cr << "  len cr: " << len_cr << endl; // verif
 
if (len_cs != len_cr || r != 1) {cout << "\tVALEUR INCORRECTE\a\a\a\n"; // validation
istr.clear(); // vider
//cout << "resultat_2= " << r << endl; // pour vérif
        return 'faux'; // renvoie 1.71766e+09
}
else    return i ;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~    depart      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
int depart()
{
int s = 0; // relancer ou arreter
float tab[2]; // tableau conteneur des 3 saisies validées
float i = 0 ; // nombre saisi à controler et valider
int n = 1 ; // n:= num de la de saisie (obtenir 3 saisies valides)
 
while (n < 4) {
    i = saisies(n);
//    cout<< "ligne 50  et i:= " << i << endl; // vérif
        if (i > 10 || i < -10) { /* bornes*/
              cout << "\n  Erreur\a\a\n\n"; // si en dehors des bornes
                 i = 0;
                               }
        else {  cout << endl; // sans 'cout' dans cette ligne une saisie alpha n'est pas
                tab[n-1]=i;   // detectée comme erreur.... ??
                 n = n + 1;
             }
}
//cout<< " (main)valeur de " << i << " n:= " << n ; //<< saisies(r);
cout << "\n     RESULTATS de la Saisie\n\n";
cout << "   a:= " << tab[0] ;
cout << "   b:= " << tab[1] ;
cout << "   c:= " << tab[2] << endl ;
 
//***
s = suite(); // relancer ou arreter
    if (s == 1) {  cin.ignore();
                    depart();   }
//***
        return 0;
}
 
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~~~       main      ~~~~~~~~~~~~~~~~~~~~~~~~~~~
int main()
{
depart();
 
consolePause(); // declenche la PAUSE si lancement de l'.exe en direct
 
        return 0;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~