Forcer l'entré d'un int par l'utilisateur C++
Résolu/Fermé
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
matthoffman
Messages postés
405
Date d'inscription
lundi 24 mars 2008
Statut
Membre
Dernière intervention
22 janvier 2013
47
26 janv. 2012 à 15:54
26 janv. 2012 à 15:54
Voici le code:
NB: Pense a initialiser ta variable hArrivee de maniere a ce que tu puisses refaire un tour de boucle
if (!(cin >> hArrivee)) { cerr << "Merci d'entrer un entier valide" << endl; cin.clear(); cin.ignore(1); }
NB: Pense a initialiser ta variable hArrivee de maniere a ce que tu puisses refaire un tour de boucle
matthoffman
Messages postés
405
Date d'inscription
lundi 24 mars 2008
Statut
Membre
Dernière intervention
22 janvier 2013
47
26 janv. 2012 à 16:11
26 janv. 2012 à 16:11
De rien :).
"edit: juste un petit détails! si j'entre plusieurs lettre a la suite, le message d'erreur se répéte. En gros si j'entre 3 lettre j'aurais 3 messages d'erreurs."
Oui desole c'est a cause du ignore ^^:
Voila.
"Donc en fait le problème venais simplement du fait que ma boucle gardé en mémoire ma variable? "
Si tu parles du probleme de boucle infini, non car avec le break tu sors de ta boucle de toute facon.
Si tu parles du fait que tu repassais sans cesse dans le message d'erreur alors oui c'etait ca le pb.
"edit: juste un petit détails! si j'entre plusieurs lettre a la suite, le message d'erreur se répéte. En gros si j'entre 3 lettre j'aurais 3 messages d'erreurs."
Oui desole c'est a cause du ignore ^^:
cin.ignore(numeric_limits<streamsize>::max(), '\n')
Voila.
"Donc en fait le problème venais simplement du fait que ma boucle gardé en mémoire ma variable? "
Si tu parles du probleme de boucle infini, non car avec le break tu sors de ta boucle de toute facon.
Si tu parles du fait que tu repassais sans cesse dans le message d'erreur alors oui c'etait ca le pb.
ZeRo0Cold
Messages postés
10
Date d'inscription
lundi 20 juin 2011
Statut
Membre
Dernière intervention
27 janvier 2012
1
27 janv. 2012 à 07:25
27 janv. 2012 à 07:25
une fonction qui permet de forcer saisir un INT en C
int saisieInt(void)
{char s[20] , c ;
int k=0,h;
do{
do{ c=getch();
} while(!isdigit(c)&& c!=13&& c!=8);
if(isdigit(c))
{s[k]=c ;k++;putchar(c);}
if(c==8&&k>0) {putchar(8);putchar(' ');putchar(8);k--;}
}while(c!=13);
s[k]='\0';
printf("\n");
h=atoi(s);
return(h);
}
seulement traduire en C++
bn courage;
int saisieInt(void)
{char s[20] , c ;
int k=0,h;
do{
do{ c=getch();
} while(!isdigit(c)&& c!=13&& c!=8);
if(isdigit(c))
{s[k]=c ;k++;putchar(c);}
if(c==8&&k>0) {putchar(8);putchar(' ');putchar(8);k--;}
}while(c!=13);
s[k]='\0';
printf("\n");
h=atoi(s);
return(h);
}
seulement traduire en C++
bn courage;
Bonjour,
Il y aurait bien la fonction atoi() pour résoudre ton problème.
Il faut prendre l'entrée utilisateur comme un char[] et la transformer en int.
mes sources:
http://www.cplusplus.com/reference/clibrary/cstdlib/atoi/
;)
Il y aurait bien la fonction atoi() pour résoudre ton problème.
Il faut prendre l'entrée utilisateur comme un char[] et la transformer en int.
mes sources:
http://www.cplusplus.com/reference/clibrary/cstdlib/atoi/
;)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
matthoffman
Messages postés
405
Date d'inscription
lundi 24 mars 2008
Statut
Membre
Dernière intervention
22 janvier 2013
47
26 janv. 2012 à 14:39
26 janv. 2012 à 14:39
Tant de reponse et aucune vraie solution.
atoi ne renvoie pas d'erreurs s'il y a des caracteres non numeriques, a mon souvenir.
isdigit check les caracteres pas la string en entier, donc si tu dois faire un parcours de chaine juste pour ca c'est quand meme vraiment moche.
Bref pour faire simple voici ce qui resoudra ton probleme:
atoi ne renvoie pas d'erreurs s'il y a des caracteres non numeriques, a mon souvenir.
isdigit check les caracteres pas la string en entier, donc si tu dois faire un parcours de chaine juste pour ca c'est quand meme vraiment moche.
Bref pour faire simple voici ce qui resoudra ton probleme:
if (!(cin >> hArrivee)) cerr << "Merci d'entrer un entier valide" << endl;
matthoffman
Messages postés
405
Date d'inscription
lundi 24 mars 2008
Statut
Membre
Dernière intervention
22 janvier 2013
47
Modifié par matthoffman le 26/01/2012 à 15:30
Modifié par matthoffman le 26/01/2012 à 15:30
Le code que je t'ai donne verifie si on peut faire rentrer le contenu du stream cin dans un entier.
Si on ne peut pas alors on ecris sur la sortie d'erreur "Merci de blablabla...."
Bien sur ce code n'empeche en rien, d'executer ta condition de boucle:
valideHeure (hArrivee)
(qui du coup en cas d'erreur ne contient rien vu que cin >> hArrivee a ete un echec)
Donc apres le comportement de ton programme c'est a toi de savoir ce que tu fais en cas d'erreur.
Un exemple, si en cas d'erreur tu veux sortir de ta boucle alors tu ecris ca:
Si on ne peut pas alors on ecris sur la sortie d'erreur "Merci de blablabla...."
Bien sur ce code n'empeche en rien, d'executer ta condition de boucle:
valideHeure (hArrivee)
(qui du coup en cas d'erreur ne contient rien vu que cin >> hArrivee a ete un echec)
Donc apres le comportement de ton programme c'est a toi de savoir ce que tu fais en cas d'erreur.
Un exemple, si en cas d'erreur tu veux sortir de ta boucle alors tu ecris ca:
if (!(cin >> hArrivee)) { cerr << "Merci d'entrer un entier valide" << endl; break; }
Je croyais avoir compris mais apparemment pas...
Si j'entre une lettre j'ai toujours ce fichu problème, le programme s'emballe.
En gros j'aimerais que si l'utilisateur entre tout autre caractère qu'un entier, mon programme lui redemande l'entré d'une valeur. Éventuellement accompagné par un petit message d'erreur.
J'ai essayé d'appliquer ce que tu m'a dit comme ceci :
Si j'entre une lettre j'ai toujours ce fichu problème, le programme s'emballe.
En gros j'aimerais que si l'utilisateur entre tout autre caractère qu'un entier, mon programme lui redemande l'entré d'une valeur. Éventuellement accompagné par un petit message d'erreur.
J'ai essayé d'appliquer ce que tu m'a dit comme ceci :
do { cout << endl << endl << "Indiquer l'heure d'arrivee en heure (sans les minutes) : "; if (!(cin >> hArrivee)) {cerr << "Merci d'entrer un entier valide" << endl; break;} } while (!valideHeure (hArrivee));
matthoffman
Messages postés
405
Date d'inscription
lundi 24 mars 2008
Statut
Membre
Dernière intervention
22 janvier 2013
47
26 janv. 2012 à 15:52
26 janv. 2012 à 15:52
Avec ce code la, si l'utilisateur rentre quelque chose qui n'est pas entier alors je t'assure que tu sors de ta boucle.
Je te fais un code pour gerer ton erreur comme tu le souhaites.
Je te fais un code pour gerer ton erreur comme tu le souhaites.
matthoffman
Messages postés
405
Date d'inscription
lundi 24 mars 2008
Statut
Membre
Dernière intervention
22 janvier 2013
47
26 janv. 2012 à 15:57
26 janv. 2012 à 15:57
Une petite precision:
es tu conscient que tu as 2 boucles dans ton programme ?
As tu bien integrer ces lignes dans tes 2 boucles ?
es tu conscient que tu as 2 boucles dans ton programme ?
As tu bien integrer ces lignes dans tes 2 boucles ?
Oui je suis conscient d'avoir 2 boucles! J'ai effectué mes tests uniquement sur la 1ere d'entre elles.
A vrai dire ton code me servira pour 4 boucles dans l'ensemble de mon programme. j'ai simplement posté la petite partie de mon programme qui avais un problème. En realité celui ci est beaucoup plus complet que ces quelques lignes ^^
A vrai dire ton code me servira pour 4 boucles dans l'ensemble de mon programme. j'ai simplement posté la petite partie de mon programme qui avais un problème. En realité celui ci est beaucoup plus complet que ces quelques lignes ^^
wahou merci a toi matthoffman ca marche ENFIN!
Donc en fait le problème venais simplement du fait que ma boucle gardé en mémoire ma variable?
edit: juste un petit détails! si j'entre plusieurs lettre a la suite, le message d'erreur se répéte. En gros si j'entre 3 lettre j'aurais 3 messages d'erreurs.
Je supose que je doit simplement mettre un nombre plus elevé dans cin.ignore(1)?
Donc en fait le problème venais simplement du fait que ma boucle gardé en mémoire ma variable?
edit: juste un petit détails! si j'entre plusieurs lettre a la suite, le message d'erreur se répéte. En gros si j'entre 3 lettre j'aurais 3 messages d'erreurs.
Je supose que je doit simplement mettre un nombre plus elevé dans cin.ignore(1)?
D'accord merci beaucoup. C'était rageant d'être bloqué sur un tel détail. Détail qui rendait mon programme vraiment bancal ^^
La j'ai mi le chiffre 10 dans cin.ignore. Mais est t'il possible de mettre quelque chose qui dise cin.ignore (nombre infini)?
C'est peu utile je l'accorde car je doute que quelqu'un s'amuse a entrer un grand nombre de chiffre...
Merci bien a tous ceux qui ont pris la peine de me répondre et plus particulièrement a matthoffman pour cette solution simple mais efficace ainsi que tes explications.
edit : je commence a croire que je suis plutôt du genre chiant!
j'ai fait un test en tapant 8h (erreur qui sera je pense courante).
le programme de demande donc d'entrée mes minutes (donc la suite du programme) puis affiche le message d'erreur (des minutes et non des heures).
Voici mon code avec les modification apportées.
La j'ai mi le chiffre 10 dans cin.ignore. Mais est t'il possible de mettre quelque chose qui dise cin.ignore (nombre infini)?
C'est peu utile je l'accorde car je doute que quelqu'un s'amuse a entrer un grand nombre de chiffre...
Merci bien a tous ceux qui ont pris la peine de me répondre et plus particulièrement a matthoffman pour cette solution simple mais efficace ainsi que tes explications.
edit : je commence a croire que je suis plutôt du genre chiant!
j'ai fait un test en tapant 8h (erreur qui sera je pense courante).
le programme de demande donc d'entrée mes minutes (donc la suite du programme) puis affiche le message d'erreur (des minutes et non des heures).
Voici mon code avec les modification apportées.
#include <iostream> using namespace std; bool valideHeure (int heure) {return (heure>= 7 && heure<= 19); } bool valideMinute (int minute) {return (minute>= 0 && minute<= 59); } int main() { int hArrivee; int mArrivee; do { cout << endl << endl << "Indiquer l'heure d'arrivee (sans les minutes) : "; if (!(cin >> hArrivee)) { cerr << "Merci d'entrer un chiffre entre 7 et 19" << endl; cin.clear(); cin.ignore(10); } }while (!valideHeure (hArrivee)); do { cout << endl << "Indiquer les minutes de votre heure d'arrivee : "; if (!(cin >> mArrivee)) { cerr << "Merci d'entrer un chiffre entre 0 et 59" << endl; cin.clear(); cin.ignore(10); }} while (!valideMinute (mArrivee)); cout << endl << "Vous etes arrivee a : " << hArrivee << "h" << mArrivee << endl; return 0; }
matthoffman
Messages postés
405
Date d'inscription
lundi 24 mars 2008
Statut
Membre
Dernière intervention
22 janvier 2013
47
26 janv. 2012 à 16:22
26 janv. 2012 à 16:22
Pour le ignore je t'ai donne la solution dans mon message precedent ^^.
Justement non il ne faut pas que tu specifies un nombre particulier de caracteres.
Regle premiere en programmation: ne jamais faire confiance a l'utilisateur.
Justement non il ne faut pas que tu specifies un nombre particulier de caracteres.
Regle premiere en programmation: ne jamais faire confiance a l'utilisateur.
Oui ca je sait ^^ quand je vois des amis ou collègues qui utilise des logiciels j'ai peur ^^
je suppose que tu parle de :
cin.ignore(numeric_limits<streamsize>::max(), '\n')
je ne suis pas encore familiarisé avec cette notation :s! A tu un petit indice stp? ^^
et pour le fait que j'ai les deux messages d'erreur quand j'entre 8h par ex?
je suppose que tu parle de :
cin.ignore(numeric_limits<streamsize>::max(), '\n')
je ne suis pas encore familiarisé avec cette notation :s! A tu un petit indice stp? ^^
et pour le fait que j'ai les deux messages d'erreur quand j'entre 8h par ex?
matthoffman
Messages postés
405
Date d'inscription
lundi 24 mars 2008
Statut
Membre
Dernière intervention
22 janvier 2013
47
26 janv. 2012 à 16:52
26 janv. 2012 à 16:52
Ok alors la fonction ignore(n, char) comme tu l'aura compris ignore les prochains n caractere, OU ignore jusqu'a ce qu'il rencontre le caractere char.
numeric_limits<streamsize>::max() fait partie de la STL. Comme son nom l'indique cela represente la limite numerique maximale que tu peux faire rentrer dans un stream.
Pour le 8h c'est normal, en fait cin fait rentrer le 8 dans ta variable, et vu que le h il peut pas le foutre dans un int, du coup il s'arrete avant le h.
Donc tes heures valent 8 ce qui est correct donc tu continues dans ton programme.
Ensuite tu continues mais ton cin n'est pas vide vu qu'il reste ce fameux "h" et le "\n", donc tu n'attends pas l'utilisateur vu que tu as encore quelque chose dans ton cin.
Donc tu le remplis pour les minutes, et vu que tu peux pas faire rentrer "h" dans un int, tu as l'erreur pour les minutes.
Essaye de trouver un moyen pour contourner ce probleme, ou peut etre un autre membre t'aidera, mais la je dois partir, donc je ne pourrais revenir que ce soir pour t'aider.
numeric_limits<streamsize>::max() fait partie de la STL. Comme son nom l'indique cela represente la limite numerique maximale que tu peux faire rentrer dans un stream.
Pour le 8h c'est normal, en fait cin fait rentrer le 8 dans ta variable, et vu que le h il peut pas le foutre dans un int, du coup il s'arrete avant le h.
Donc tes heures valent 8 ce qui est correct donc tu continues dans ton programme.
Ensuite tu continues mais ton cin n'est pas vide vu qu'il reste ce fameux "h" et le "\n", donc tu n'attends pas l'utilisateur vu que tu as encore quelque chose dans ton cin.
Donc tu le remplis pour les minutes, et vu que tu peux pas faire rentrer "h" dans un int, tu as l'erreur pour les minutes.
Essaye de trouver un moyen pour contourner ce probleme, ou peut etre un autre membre t'aidera, mais la je dois partir, donc je ne pourrais revenir que ce soir pour t'aider.
d'accord! Donc en gros il faudrait que je "vide" la mémoire une fois que je rencontre un char...
Merci bien, je vais planché sur le sujet dans la soirée! Si je trouve je l'indiquerais, dans le cas contraire ton aide sera la bienvenue.
Merci beaucoup j'ai déjà compris beaucoup de chose avec tes explications.
Merci bien, je vais planché sur le sujet dans la soirée! Si je trouve je l'indiquerais, dans le cas contraire ton aide sera la bienvenue.
Merci beaucoup j'ai déjà compris beaucoup de chose avec tes explications.
Pk la moitié du sujet a été supprimé? :s
Bon bha petit rappel j'en été la:
Et j'avais le souci que si j'entré 8h, j'avais un message d'erreur avant d'avoir la demande pour la suite du programme...
Mattfoffman m'a deja beaucoup aidé! Mais je n'arrive pas a "vidé" mon cin pour évité les erreurs!
Bon bha petit rappel j'en été la:
do { cout << endl << endl << "Indiquer l'heure d'arrivee (sans les minutes) : "; if (!(cin >> hArrivee)) { cerr << "Merci d'entrer un chiffre entre 7 et 19" << endl; cin.clear(); cin.ignore (numeric_limits<streamsize>::max(), '\n'); } }while (!valideHeure (hArrivee));
Et j'avais le souci que si j'entré 8h, j'avais un message d'erreur avant d'avoir la demande pour la suite du programme...
Mattfoffman m'a deja beaucoup aidé! Mais je n'arrive pas a "vidé" mon cin pour évité les erreurs!
matthoffman
Messages postés
405
Date d'inscription
lundi 24 mars 2008
Statut
Membre
Dernière intervention
22 janvier 2013
47
27 janv. 2012 à 01:37
27 janv. 2012 à 01:37
Désolé pour la réponse tardive. Les messages n'ont pas disparus, ils ont juste été "uppés". regarde plus haut dans le topic ;).
Pour ton programme si je me souviens bien, tu veux que 8h soit reconnu comme une erreur, et non pas que le 8 soit sauvergardé et on s'en fout du reste.
Donc voici ce que je te propose:
J'ai donc rajouté une vérification: cin.peek() qui te renvoie le prochain caractère présent dans ton stream. On vérifie donc si l'utilisateur a fait un retour a la ligne directement après son nombre.
J'ai rajouté une initialisation a -1 (pour que tu refasses un tour de boucle). En effet dans le cas ou l'utilisateur rentre "8h", comme je te l'avais dit cette aprem, ta variable se verra quand même attribué la valeur 8, et du coup tu sortiras de ta boucle et donc tu continueras ton programme comme si 8h n'était pas une erreur.
Voila tiens moi au courant :). Bonne nuit, et encore désolé de répondre que maintenant.
Pour ton programme si je me souviens bien, tu veux que 8h soit reconnu comme une erreur, et non pas que le 8 soit sauvergardé et on s'en fout du reste.
Donc voici ce que je te propose:
if (!(cin >> hArrivee) || (cin.peek() != '\n')) { hArrivee = -1; cerr << "Merci d'entrer un chiffre entre 7 et 19" << endl; cin.clear(); cin.ignore(numeric_limits<streamsize>::max(), '\n'); }
J'ai donc rajouté une vérification: cin.peek() qui te renvoie le prochain caractère présent dans ton stream. On vérifie donc si l'utilisateur a fait un retour a la ligne directement après son nombre.
J'ai rajouté une initialisation a -1 (pour que tu refasses un tour de boucle). En effet dans le cas ou l'utilisateur rentre "8h", comme je te l'avais dit cette aprem, ta variable se verra quand même attribué la valeur 8, et du coup tu sortiras de ta boucle et donc tu continueras ton programme comme si 8h n'était pas une erreur.
Voila tiens moi au courant :). Bonne nuit, et encore désolé de répondre que maintenant.
a oui en effet ^^! Perturbant ca... Tellement l'habitude d'aller directement en ba du sujet...
Pour la réponse tardive il n'y a aucun souci! Étant un projet personnel je n'ai pas de délai a tenir et chacun a sa vie tout de même ^^.
Je n'ai pas le temps de testé pour le moment mais je le ferais dans la journée.
merci beaucoup a toi, c'est agréable d'avoir de l'aide accompagné d'explication (afin de ne pas copié bêtement ce qu'on m'envoie)
Pour la réponse tardive il n'y a aucun souci! Étant un projet personnel je n'ai pas de délai a tenir et chacun a sa vie tout de même ^^.
Je n'ai pas le temps de testé pour le moment mais je le ferais dans la journée.
merci beaucoup a toi, c'est agréable d'avoir de l'aide accompagné d'explication (afin de ne pas copié bêtement ce qu'on m'envoie)
choubaka
Messages postés
39420
Date d'inscription
jeudi 4 avril 2002
Statut
Modérateur
Dernière intervention
19 février 2025
2 104
25 janv. 2012 à 10:43
25 janv. 2012 à 10:43
bonjour
C'est ce qu'on appelle la gestion d'exception (erreurs).
Vous devez contrôler les valeurs entrées par l'utilisateur avant de les traiter.
Un simple test "If". si l'entrée est correcte, on continue le traitement sinon on demande à l'utilisateur d'entrer à nouveau les valeurs correctes.
C'est ce qu'on appelle la gestion d'exception (erreurs).
Vous devez contrôler les valeurs entrées par l'utilisateur avant de les traiter.
Un simple test "If". si l'entrée est correcte, on continue le traitement sinon on demande à l'utilisateur d'entrer à nouveau les valeurs correctes.
D'accord je pensé que mon booleen suffisait à définir cette exception.
Par contre créer un test "if" n'est pas un problème mais comment dire au programme :
"Si a n'est pas un int" ?
Je doit simplement remplacer mon booleen par un if effectuant la meme verification?
edit: Je vien de creer ce test IF est j'ai toujorus le meme probleme :s
Par contre créer un test "if" n'est pas un problème mais comment dire au programme :
"Si a n'est pas un int" ?
Je doit simplement remplacer mon booleen par un if effectuant la meme verification?
edit: Je vien de creer ce test IF est j'ai toujorus le meme probleme :s
int valideHeure2 (int heure) { if (heure>= 7 && heure<= 19) { return heure; } else { cout << endl << endl << "Indiquer l'heure d'arrivee en heure (sans les minutes) : "; cin >> hArrivee; valideHeure2 (hArrivee); } return 0; } int main() { int hArrivee; cout << endl << endl << "Indiquer l'heure d'arrivee en heure (sans les minutes) : "; cin >> hArrivee; valideHeure2 (hArrivee); return 0; }
choubaka
Messages postés
39420
Date d'inscription
jeudi 4 avril 2002
Statut
Modérateur
Dernière intervention
19 février 2025
2 104
25 janv. 2012 à 11:00
25 janv. 2012 à 11:00
c'est du C++ ?
En effet j'ai oublié de préciser cette information capitale :s
j'ai édité le titre pour ajouter l'information ^^
j'ai édité le titre pour ajouter l'information ^^
choubaka
Messages postés
39420
Date d'inscription
jeudi 4 avril 2002
Statut
Modérateur
Dernière intervention
19 février 2025
2 104
25 janv. 2012 à 11:15
25 janv. 2012 à 11:15
je crois que tu dois utiliser isdigit
Bon soit j'ai mal utilisé isdigit, soit cela n'a pas résolu mon problème.
Déjà cela fonctionne bizarrement ^^.
Le programme me demande de nouveau d'entré mon heure d'arrivé jusqu'à 47 inclus. Au delà il a l'air de passer a l suite du programme!
Ensuite si je tape une lettre par exemple j'ai toujours le même problème! Le programme plante et lance une boucle indefiniment!
J'ai modifié mon If comme ci dessous :
Déjà cela fonctionne bizarrement ^^.
Le programme me demande de nouveau d'entré mon heure d'arrivé jusqu'à 47 inclus. Au delà il a l'air de passer a l suite du programme!
Ensuite si je tape une lettre par exemple j'ai toujours le même problème! Le programme plante et lance une boucle indefiniment!
J'ai modifié mon If comme ci dessous :
int valideHeure2 (int heure) { if (isdigit(heure)) { return heure; } else { int hArrivee; cout << endl << endl << "Indiquer l'heure d'arrivee en heure (sans les minutes) : "; cin >> hArrivee; valideHeure2 (hArrivee); } return 0; }
Petit up si quelqu'un a une idée merci!
Merci tout de meme a choubaka pour avoir essayé de resoudre mon probleme.
Merci tout de meme a choubaka pour avoir essayé de resoudre mon probleme.
Merci pour vos réponses!
La fonction atoi() me semble plutôt intéressante (même si c'est un peu tuer une mouche avec un canon).
Cependant si celle ci renvoi 0 lorsqu'on n'entre pas un entier, alors cela rentre dans mes conditions pour la demande des minutes... Donc si l'utilisateur entre une lettre et non un entier (pour les minutes), au lieu d'une erreur, le programme prendra la valeur 0... C'est mieux qu'un plantage mais ce n'est pas propre non plus!
Matthoffman, je n'ai pas vraiment compris comment utiliser tes lignes de code (a quel endroit exact par ex etc)
Peut tu me l'expliquer afin que je puisse éventuellement le réutiliser dans d'autres programmes?
Merci bien
je l'ai inséré comme ci dessous mais j'ai toujours un plantage lorsque que j'entre une lettre! Est moi qui ai mal utilisé ta fonction?
Mise à part ce problème avec l'entrée d'entiers cela marche toujours!
La fonction atoi() me semble plutôt intéressante (même si c'est un peu tuer une mouche avec un canon).
Cependant si celle ci renvoi 0 lorsqu'on n'entre pas un entier, alors cela rentre dans mes conditions pour la demande des minutes... Donc si l'utilisateur entre une lettre et non un entier (pour les minutes), au lieu d'une erreur, le programme prendra la valeur 0... C'est mieux qu'un plantage mais ce n'est pas propre non plus!
Matthoffman, je n'ai pas vraiment compris comment utiliser tes lignes de code (a quel endroit exact par ex etc)
Peut tu me l'expliquer afin que je puisse éventuellement le réutiliser dans d'autres programmes?
Merci bien
je l'ai inséré comme ci dessous mais j'ai toujours un plantage lorsque que j'entre une lettre! Est moi qui ai mal utilisé ta fonction?
Mise à part ce problème avec l'entrée d'entiers cela marche toujours!
do { cout << endl << endl << "Indiquer l'heure d'arrivee en heure (sans les minutes) : "; if (!(cin >> hArrivee)) cerr << "Merci d'entrer un entier valide" << endl; } while (!valideHeure (hArrivee));
vordano
Messages postés
1685
Date d'inscription
mardi 12 juillet 2011
Statut
Membre
Dernière intervention
20 juillet 2012
316
26 janv. 2012 à 15:46
26 janv. 2012 à 15:46
bonjour,
pour vérifier le caractère, tu peux te baser sur son code ascii -> http://table-ascii.com/
pour info tu t'es trompé dans ton test sur les minutes :)
(minute>= 0 && minute<= 60) //ici tu as un total de 61 minutes, et la minute 0 et la 60 est la même minute
devrais être
(minute>= 0 && minute< 60)
pour vérifier le caractère, tu peux te baser sur son code ascii -> http://table-ascii.com/
pour info tu t'es trompé dans ton test sur les minutes :)
(minute>= 0 && minute<= 60) //ici tu as un total de 61 minutes, et la minute 0 et la 60 est la même minute
devrais être
(minute>= 0 && minute< 60)