forked from PRG1A23/PRG1A23-Labo3-Exercices-courts
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ex4.cpp
50 lines (43 loc) · 1.26 KB
/
ex4.cpp
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
#include <iostream>
#include <limits>
using namespace std;
// Ecrivez la fonction lire_multiple_de(n) qui demande
// à l'utilisateur d'entrer un multiple de n, et lui
// dit d'essayer encore jusqu'à ce qu'il le fasse.
//
// Exemple d'exécution :
//
//Entrez un entier multiple de 3: 23
//Essayez encore : douze ?
//Essayez encore : pardon, 12
//Essayez encore : 13
//Essayez encore : 12
//Merci, vous avez entre 12
int lire_multiple_de(int nb);
bool is_number(const string& s);
int main() {
int n = lire_multiple_de(3);
cout << "Merci, vous avez entre " << n << endl;
}
int lire_multiple_de(int nb){
string in;
cout << "Entrez un entier multiple de " << nb << ": ";
startFunc:
while ((cin >> in) and !is_number(in)){
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout << "Essayez encore : ";
}
if(stoi(in) % nb != 0){
cout << "Essayez encore : ";
cin.ignore(numeric_limits<streamsize>::max(), '\n');
goto startFunc;
}
return stoi(in);
}
// https://stackoverflow.com/questions/4654636/how-to-determine-if-a-string-is-a-number-with-c
bool is_number(const string& s)
{
string::const_iterator it = s.begin();
while (it != s.end() && isdigit(*it)) ++it;
return !s.empty() && it == s.end();
}