Verifier si une valeur est un nombre. c++
Résolu/Fermé
dorian100
Messages postés
161
Date d'inscription
dimanche 6 janvier 2008
Statut
Membre
Dernière intervention
6 août 2010
-
17 juil. 2009 à 14:23
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 16 sept. 2015 à 14:08
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 16 sept. 2015 à 14:08
A voir également:
- Verifier si une valeur est un nombre. c++
- Verifier un lien - Guide
- En raison d'un nombre important d'échec de connexion snapchat - Forum Snapchat
- Vérifier si mot de passe piraté - Guide
- Le fichier contient le nombre de voyageurs dans 3 gares. dans la cellule b5, saisissez une formule qui calcule le total et se met à jour si on change une valeur du tableau. quel total obtenez-vous ? quelle formule avez-vous saisie ? ✓ - Forum Excel
- Snapchat locked : mon compte snapchat est bloqué ✓ - Forum Snapchat
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.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 840
17 juil. 2009 à 23:18
17 juil. 2009 à 23:18
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.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 840
16 sept. 2015 à 14:08
16 sept. 2015 à 14:08
Ca ne répond pas à la question. Sinon merci de regarder la date des posts avant de répondre...
cchristian
Messages postés
921
Date d'inscription
lundi 21 janvier 2008
Statut
Membre
Dernière intervention
6 mars 2012
131
17 juil. 2009 à 17:10
17 juil. 2009 à 17:10
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
mamiemando
Messages postés
33325
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
22 octobre 2024
7 799
17 juil. 2009 à 17:26
17 juil. 2009 à 17:26
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
dorian100
Messages postés
161
Date d'inscription
dimanche 6 janvier 2008
Statut
Membre
Dernière intervention
6 août 2010
3
17 juil. 2009 à 20:29
17 juil. 2009 à 20:29
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.
mamiemando
Messages postés
33325
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
22 octobre 2024
7 799
17 juil. 2009 à 22:34
17 juil. 2009 à 22:34
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
dorian100
Messages postés
161
Date d'inscription
dimanche 6 janvier 2008
Statut
Membre
Dernière intervention
6 août 2010
3
18 juil. 2009 à 10:12
18 juil. 2009 à 10:12
ok, sa va
Merci à tous et une bonne journée
Merci à tous et une bonne journée
6 janv. 2012 à 01:12
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.