Verifier si une valeur est un nombre. c++
Résolu
dorian100
Messages postés
161
Date d'inscription
Statut
Membre
Dernière intervention
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
question de routine pour les habitués de la programmation, comment vérifier si une variable int est bien un nombre pour ne pas faire planter mon programme ?
merci.
question de routine pour les habitués de la programmation, comment vérifier si une variable int est bien un nombre pour ne pas faire planter mon programme ?
merci.
A voir également:
- Verifier si une valeur est un nombre. c++
- Verifier compatibilite windows 11 - Guide
- Verifier un lien - Guide
- Vérifier si mot de passe piraté - Guide
- Nombre de jours entre deux dates excel - Guide
- Nombre facile - Télécharger - Outils professionnels
8 réponses
mamiemando : Sans déconner je trouve cette réponse vraiment nulle (avec celle d'avant ca fait 2) je répond jamais sur les forum mais la ca m'énerve un peu de voir ca.
Le mec demande une info et tout ce que tu trouve a dire c'est tourner autour du pot.
Personnellement, je peut t'assurer que y'a des gens assez simplet pour mettre une lettre au lieu d'un chiffre et autre chose importante que tu ne doit pas savoir si l'utilisateur rentre une lettre ca fait planter le programme et notre ami dorian100 voulais juste faire cette vérification. Dans le genre de réponse "je vois pas ce que tu veut dire mais j'essaye de répondre un truc a coté de la plaque" ....
pour dorian100 et les prochains qui vont chercher une réponse a cette question:
personnellement je pencherai pour enregistrer l'entrée de l'utilisateur dans un std::string et ensuite tester si la transformation du string est possible avec la référence sstream.
exemple de code :
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main (void)
{
string s;
cout << "Tapez une chaine : "; getline (cin, s);
istringstream istr(s);
int i;
if (istr >> i) cout << "VOUS AVEZ TAPE L'ENTIER " << i << endl;
else cout << "VALEUR INCORRECTE" << endl;
return 0;
}
Cordialement,
PS : je sais que la date est ancienne mais c'est important (à mon sens) que des débutants qui cherchent des réponses ne soient pas dans une impasse comme ca et en plus, des personnes chercheront encore ces réponses et tomberont sur une solution plutot que sur la réponse de mamiemando.
Le mec demande une info et tout ce que tu trouve a dire c'est tourner autour du pot.
Personnellement, je peut t'assurer que y'a des gens assez simplet pour mettre une lettre au lieu d'un chiffre et autre chose importante que tu ne doit pas savoir si l'utilisateur rentre une lettre ca fait planter le programme et notre ami dorian100 voulais juste faire cette vérification. Dans le genre de réponse "je vois pas ce que tu veut dire mais j'essaye de répondre un truc a coté de la plaque" ....
pour dorian100 et les prochains qui vont chercher une réponse a cette question:
personnellement je pencherai pour enregistrer l'entrée de l'utilisateur dans un std::string et ensuite tester si la transformation du string est possible avec la référence sstream.
exemple de code :
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main (void)
{
string s;
cout << "Tapez une chaine : "; getline (cin, s);
istringstream istr(s);
int i;
if (istr >> i) cout << "VOUS AVEZ TAPE L'ENTIER " << i << endl;
else cout << "VALEUR INCORRECTE" << endl;
return 0;
}
Cordialement,
PS : je sais que la date est ancienne mais c'est important (à mon sens) que des débutants qui cherchent des réponses ne soient pas dans une impasse comme ca et en plus, des personnes chercheront encore ces réponses et tomberont sur une solution plutot que sur la réponse de mamiemando.
Salut,
Par contre, ce que tu peux faire, c'est tester la valeur retourner par cin.
Par exemple :
Cdlt
Par contre, ce que tu peux faire, c'est tester la valeur retourner par cin.
Par exemple :
int nbJoueur=0; cout << "nombre:"; while( !(cin >> nbJoueur) ) { string tmp; cin.clear(); cin >> tmp; cout << "incorrect" << endl; }
Cdlt
Bonsoir,
essaye ça:
int demandeNr(string info)
{
int demandeNr(0);
do
{
cout <<endl <<info;
cin >>demandeNr;
cin.clear();
cin.ignore(100, '\n');
} while (!int(demandeNr));
return demandeNr;
il sort du boucle uniquement si vous avez entrée un numéro.
essaye ça:
int demandeNr(string info)
{
int demandeNr(0);
do
{
cout <<endl <<info;
cin >>demandeNr;
cin.clear();
cin.ignore(100, '\n');
} while (!int(demandeNr));
return demandeNr;
il sort du boucle uniquement si vous avez entrée un numéro.
Bonjour,
De manière générale c'est au moment de la collecte des données (de la donnée) que les contrôles (de numéricité, en l'occurrence) peuvent et doivent être effectués ( les programmes de collecte et de contrôle des données d'une application). Après il est bien tard, sinon trop tard, pour faire quelque chose, le traitement sera nécessairement erroné par carence (impossibilité de recréer la valeur erronée) ou plantage du programme.
De manière générale c'est au moment de la collecte des données (de la donnée) que les contrôles (de numéricité, en l'occurrence) peuvent et doivent être effectués ( les programmes de collecte et de contrôle des données d'une application). Après il est bien tard, sinon trop tard, pour faire quelque chose, le traitement sera nécessairement erroné par carence (impossibilité de recréer la valeur erronée) ou plantage du programme.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Une variable int est toujours un entier, la question n'a pas de sens. Si tu n'initialises pas ton int, il contient une valeur arbitraire.
La question aurait un sens si tu te demandais si une chaîne de caractère correspond à un entier, mais ce n'est apparemment pas ton cas.
Bonne chance
La question aurait un sens si tu te demandais si une chaîne de caractère correspond à un entier, mais ce n'est apparemment pas ton cas.
Bonne chance
je pense que j'ai pas été assez précis, en fait je veux éviter un plantage de mon programme au cas ou l'utilisateur viendrait à taper des lettres à la place d'un chiffre entier.
j'avais pensé à un truc du genre mais je ne peux pas dire : nbjoueur != int ( c'est juste là que je coince).
while (nbjoueur != int)
{ cout << "Erreur. Veuillez entrer un nombre:" << endl; // vérification nbre nbjoueur =V int
cin >> nbjoueur;
}
en fait je débute en c++, excusez mon ignorance...
merci d'avance.
j'avais pensé à un truc du genre mais je ne peux pas dire : nbjoueur != int ( c'est juste là que je coince).
while (nbjoueur != int)
{ cout << "Erreur. Veuillez entrer un nombre:" << endl; // vérification nbre nbjoueur =V int
cin >> nbjoueur;
}
en fait je débute en c++, excusez mon ignorance...
merci d'avance.
Non mais c'est ce que je te dis, ça n'a pas de sens. Ta variable nbjoueur est toujours une valeur numérique. De plus un type ne peut pas intervenir dans une comparaison en C++.
La seule chose à éventuellement contrôler, c'est que cette variable est positive (chose que tu peux sous entendre si c'est une variable unsigned int) et pas trop grande. La lecture sur std::cin d'un entier ne permet pas à l'utilisateur de saisir une chaîne tu n'as donc rien à faire.
Bonne chance
La seule chose à éventuellement contrôler, c'est que cette variable est positive (chose que tu peux sous entendre si c'est une variable unsigned int) et pas trop grande. La lecture sur std::cin d'un entier ne permet pas à l'utilisateur de saisir une chaîne tu n'as donc rien à faire.
Bonne chance
Je suis d'accord avec toi : mon 2e message était inapproprié car je n'avais toujours pas compris à ce moment là qu'il voulait contrôler une saisie clavier.
Je suis également d'accord sur le fait que déterrer un sujet de 2009 c'est pas top, surtout si c'est pour donner une solution qui globalement est moins bonne que celle déjà donnée (cf celle de fiddy).
De plus la réponse que je donnais à l'époque n'était pas pour tourner autour du pot, à l'époque je ne pensais pas qu'on pouvait contrôler la saisie avec la valeur de retour de <<. Car si tu tapes n'importe quoi tu récupères 0 dans ton entier et du coup tu ne peux rien tester. Bref, ce n'était pas pour le faire tourner en bourrique. Mais bon je te remercie pour ces remarques très sympathiques, ça fait toujours plaisir.
J'en profite pour te rappeler que le système de "vote" sur les réponses permet justement d'avoir les réponses de jugée de "bonne qualité" en haut du fil de discussion et ainsi permettre au débutant comme tu dis de tomber directement sur la réponse. Donc l'écueil auquel tu fais référence... n'est pas très significatif.
Maintenant si tu veux continuer cette discussion des plus captivantes, ça ne me pose pas de problème, mais plutôt par messages privés pour ne pas polluer davantage ce fil de discussion.
Merci pour ta contribution toutefois,
Cordialement.