Saisie contrôlée et bornée de 3 floats
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:
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;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |