Forcer l'entré d'un int par l'utilisateur C++
Résolu
Lanthane
-
Lanthane -
Lanthane -
Bonjour,
Étant débutant en programmation je me suis occupé a créer un programme simple de calcul d'heure. En gros en fonction d'une heure d'arrivé cela renvoi une heure de sortie en ajoutant une durée prédéterminée.
Tout marche nickel SAUF un petit détails dont je ne comprend pas l'origine (rendant difficile toute recherche pour résoudre mon problème).
Je demande à l'utilisateur d'entrer une valeur type int (nombre d'heures ou de minutes) afin de faire les calculs nécessaires. Cela marche tant que l'utilisateur rentre bien un nombre entier.
CEPENDANT si l'utilisateur entre un autre caractère (comme une lettre), mon programme plante complétement...
Comment dois je procéder? Je pensais forcer l'entrée d'un int mais comment? Existe t il une solution mieux adaptée?
Je vous envoie la partie de mon code qui pause problème afin de mieux comprendre.
Merci de votre aide.
Étant débutant en programmation je me suis occupé a créer un programme simple de calcul d'heure. En gros en fonction d'une heure d'arrivé cela renvoi une heure de sortie en ajoutant une durée prédéterminée.
Tout marche nickel SAUF un petit détails dont je ne comprend pas l'origine (rendant difficile toute recherche pour résoudre mon problème).
Je demande à l'utilisateur d'entrer une valeur type int (nombre d'heures ou de minutes) afin de faire les calculs nécessaires. Cela marche tant que l'utilisateur rentre bien un nombre entier.
CEPENDANT si l'utilisateur entre un autre caractère (comme une lettre), mon programme plante complétement...
Comment dois je procéder? Je pensais forcer l'entrée d'un int mais comment? Existe t il une solution mieux adaptée?
Je vous envoie la partie de mon code qui pause problème afin de mieux comprendre.
Merci de votre aide.
#include <iostream> using namespace std; bool valideHeure (int heure) {return (heure>= 7 && heure<= 19); } bool valideMinute (int minute) {return (minute>= 0 && minute<= 60); } int main() { int hArrivee; int mArrivee; do { cout << endl << endl << "Indiquer l'heure d'arrivee en heure (sans les minutes) : "; cin >> hArrivee; } while (!valideHeure (hArrivee)); do { cout << endl << "Indiquer les minutes de votre heure d'arrivee : "; cin >> mArrivee; } while (!valideMinute (mArrivee)); cout << endl << "Vous etes arrivee a : " << hArrivee << "h" << mArrivee << endl; return 0; }
A voir également:
- Forcer l'entré d'un int par l'utilisateur C++
- Forcer demarrage pc - Guide
- Forcer la suppression d'un fichier - Guide
- Forcer la reinitialisation pc - Guide
- Forcer à quitter - Guide
- Comment utiliser un chromecast - Guide
23 réponses
Bonjour,
Forcer l'entrée d'un int par l'utilisateur n'est pas possible nativement. En revanche, il est tout à fait possible de contrôler la valeur et de vérifier qu'il s'agit d'un int.
Voici un exemple :
Forcer l'entrée d'un int par l'utilisateur n'est pas possible nativement. En revanche, il est tout à fait possible de contrôler la valeur et de vérifier qu'il s'agit d'un int.
Voici un exemple :
int nbJoueur=0; cout << "nombre:"; while( !(cin >> nbJoueur) ) { string tmp; cin.clear(); cin >> tmp; cout << "incorrect" << endl; }issu de https://forums.commentcamarche.net/forum/affich-13403731-verifier-si-une-valeur-est-un-nombre-c
Merci pour le code, mais la personnellement je ne comprend pas grand chose XD!
sinon j'ai trouvé ceci dans mes recherches du soir (suite aux information fournies par mattoffman) :
http://www.siteduzero.com/tutoriel-3-308268-la-saisie-securisee-en-c.html
Tres intéressant, mais est ce vraiment nécessaire d'avoir un code si énorme pour ce problème???
Enfin si cela peu aider d'autre personnes!
sinon j'ai trouvé ceci dans mes recherches du soir (suite aux information fournies par mattoffman) :
http://www.siteduzero.com/tutoriel-3-308268-la-saisie-securisee-en-c.html
Tres intéressant, mais est ce vraiment nécessaire d'avoir un code si énorme pour ce problème???
Enfin si cela peu aider d'autre personnes!
C'est quoi que tu ne comprends pas ?
int nbJoueur=0; //déclaration de la variable cout << "nombre:"; //affichage de "nombre:" while( !(cin >> nbJoueur) ) { //lecture du clavier en tentant de stockant dans la variable nbJoueur. On boucle jusqu'à ce que l'affectation de la variable se fasse sans erreur. string tmp; //déclaration de tmp cin.clear(); //on efface les bits d'erreur cin >> tmp; //ce qui n'a pa pas pu être stocké dans nbJoueur le sera dans tmp (cela videra le buffer. Mais ça sera mieux de tout simplement purger le buffer clavier) cout << "incorrect" << endl; }
Sinon en effet ton code est très intéressant je te remercie! Le seul détails c'est que l'utilisateur peu entré tout ce qu'il désire avec un chiffre... Par contre il est vrai que cela ne renvoi qu'une seule erreur et non plusieurs comme le problème que j'avais il y a peu de temps ^^.
Maintenant que mon problème est résolu, je n'ai plus qu'a planché sur ces différentes solutions histoire d'être sur de bien avoir tout assimilé ^^
Merci encore a vous.
Maintenant que mon problème est résolu, je n'ai plus qu'a planché sur ces différentes solutions histoire d'être sur de bien avoir tout assimilé ^^
Merci encore a vous.
matthoffman,
Je te remercie, après avoir effectué quelques tests sur le code que tu m' fourni, cela marche impeccable.
Quand j'aurais un peu plus de temps je relirai un peu tout ca histoire de bien comprendre le système.
Ensuite je vais l'appliquer aux différentes sections de mon programme qui on ce même problème.
Grâce a toi je vais enfin pouvoir finalisé mon programme et obtenir quelque chose de propre (et à l'abri des utilisateurs maladroits XD).
Pour le petit lien que j'ai trouvé et posté ci dessus, qu'en pense tu?
Je te remercie, après avoir effectué quelques tests sur le code que tu m' fourni, cela marche impeccable.
Quand j'aurais un peu plus de temps je relirai un peu tout ca histoire de bien comprendre le système.
Ensuite je vais l'appliquer aux différentes sections de mon programme qui on ce même problème.
Grâce a toi je vais enfin pouvoir finalisé mon programme et obtenir quelque chose de propre (et à l'abri des utilisateurs maladroits XD).
Pour le petit lien que j'ai trouvé et posté ci dessus, qu'en pense tu?
De rien, content d'avoir pu t'aider.
En ce qui concerne le lien que tu as poste, en effet il a l'air tres interessant pour expliquer tout ca, j'ai lu en diagonale vu la longueur du tuto, mais on retrouve bien certains principes qui sont dans les quelques lignes de code que je t'ai donne.
"Ensuite je vais l'appliquer aux différentes sections de mon programme qui on ce même problème. "
Pense a faire un code generique alors:
Une fonction de verification qui prends ton entier en argument (et pourquoi pas un message d'erreur), et tu n'as plus qu'a faire l'appel a la fonction.
Bon courage pour la suite.
En ce qui concerne le lien que tu as poste, en effet il a l'air tres interessant pour expliquer tout ca, j'ai lu en diagonale vu la longueur du tuto, mais on retrouve bien certains principes qui sont dans les quelques lignes de code que je t'ai donne.
"Ensuite je vais l'appliquer aux différentes sections de mon programme qui on ce même problème. "
Pense a faire un code generique alors:
Une fonction de verification qui prends ton entier en argument (et pourquoi pas un message d'erreur), et tu n'as plus qu'a faire l'appel a la fonction.
Bon courage pour la suite.
Oui j'ai justement trouvé ce tuto par hasard en tapant certaines fonctions que TU m'avais fourni ^^ alors que je voulais bien en comprendre le principe.
Pour les fonctions recurante je les place habituellement dans un fichier cpp afin de les apeller ensuite :). Le tuto dont je me sert (du site du zero d'ailleurs) m'y a déjà habitué ainsi que les bases de programmation que j'avais reçu avant ca.
Maintenant j'ai du boulot pour le week end pour appliquer tous ca correctement ^^.
Merci beaucoup pour ta patience et tes conseils adaptées.
Pour les fonctions recurante je les place habituellement dans un fichier cpp afin de les apeller ensuite :). Le tuto dont je me sert (du site du zero d'ailleurs) m'y a déjà habitué ainsi que les bases de programmation que j'avais reçu avant ca.
Maintenant j'ai du boulot pour le week end pour appliquer tous ca correctement ^^.
Merci beaucoup pour ta patience et tes conseils adaptées.