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; } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Partager