Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2678 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Controle d'entier dans un cin !!!???

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Controle d'entier dans un cin !!!???

n°715190
Mono-neuro​ne
Posté le 04-05-2004 à 13:00:37  profilanswer
 

Bonjour, j'ai un ti prob en C et C++
 
En fait je saisi un nombre avec cin seulement je ne sais pas effectuer
de isdigit sur mon nombre pour verifier que c'est bien un entier puisque cin sort un stream !! Y a t'il une fonction qui peut le vérifier ou a tout le moins me convertir ma stream en un entier ???
 
Merci d'avance à ceux qui prendront le temps de me lire et me répondre.
A+

mood
Publicité
Posté le 04-05-2004 à 13:00:37  profilanswer
 

n°715201
SoWhatIn22
Posté le 04-05-2004 à 13:24:43  profilanswer
 

Code :
  1. int entier;
  2. cin >> entier;
  3. if(cin.fail())
  4. {
  5.     // blablabla
  6. }


Message édité par SoWhatIn22 le 04-05-2004 à 13:24:57
n°715202
Taz
bisounours-codeur
Posté le 04-05-2004 à 13:26:15  profilanswer
 

vous avez toujours l'art et la manière de faire compliqué

Code :
  1. int entier;
  2. if(not cin >> entier)
  3. { //blabla }

n°715205
SoWhatIn22
Posté le 04-05-2004 à 13:30:52  profilanswer
 

> je ne connaissais pas cette syntaxe...
> tu peux préciser la signification de cette syntaxe avec not stp?
 
je viens de regarder. je ne savais pas que not était une macro = synonyme de ! oki.


Message édité par SoWhatIn22 le 04-05-2004 à 14:28:07
n°715218
Taz
bisounours-codeur
Posté le 04-05-2004 à 13:42:13  profilanswer
 

hey j'ai oublié des jolie parenthèses :D
 
not(cin >> entier)
 
ou alors t'inverse ton then/else
 
if(cin >> entier)
ok;
else pas_bon;

n°715234
xterminhat​e
Si vis pacem, para bellum.
Posté le 04-05-2004 à 14:02:52  profilanswer
 

Dans la même catégorie, je souhaiterais saisir une valeur. Lorsque cette valeur est un nombre, la saisie doit être placée dans un type entier, lorsque cette valeur n'est pas un nombre, la saisie doit etre placée dans un chaine.
 
En me basant sur l'exemple donné, cela donnerait ca...

Code :
  1. #include<iostream>
  2. int main()
  3. {
  4. unsigned int valeur( 0U );
  5. if( std::cin >> valeur )
  6. {
  7. /****/
  8. }
  9. else
  10. {
  11. std::cin.clear();
  12. std::string chaine;
  13. std::cin >> chaine;
  14. /****/
  15. }
  16. }


---------------
Cordialement, Xterm-in'Hate...
n°715261
xterminhat​e
Si vis pacem, para bellum.
Posté le 04-05-2004 à 14:23:20  profilanswer
 

Cette solution me plaisait bien, mais il y a un hic! Lorsque la saisie est égale à "-", le "-" est interprété comme un type entier ! :(


---------------
Cordialement, Xterm-in'Hate...
n°715370
Mono-neuro​ne
Posté le 04-05-2004 à 16:16:22  profilanswer
 

Merci beaucoup (à toi et aux autres) mais j'ai un new prob maintenant. Je voudrais, lorsque mon cin recoit des char a la place d'un entier, donner la possibilité à l'utilisateur de réentrer correctement la valeur. Seulement, apparamement le cin ne veut pas se vider!!! J'ai pourtant essayé avec le cin.clear(); mais rien y fait.  
 
Aurais tu une explication à ce phénomène un peu étrange ;-)
 voila cette partie de mes lignes de code...
 
cout << "Entrez le numero de la page contenant le mot ...";
cin >> ValPg;
while ( cin.fail())
{  
   cin.clear();  //???
   cout << "Le numero de page est sence etre un entier !!!" << endl;
   cout << "Entrez le numero de la page contenant le mot ...";
   cin >> ValPg;
}

n°715379
Taz
bisounours-codeur
Posté le 04-05-2004 à 16:27:24  profilanswer
 

normal tu n'en fait qu'à ta tête. fais comme on te dit et fais une recherche, j'ai montré 100x comment faire

n°716304
Mono-neuro​ne
Posté le 05-05-2004 à 15:10:27  profilanswer
 

J'ai aussi essayé ta méthode mais j'ai le meme problème en fait. J'ai aussi effectué une recherche puisque tu me disais que tu avais déjà répondu à ce genre de question. J'ai cherché sur tes réponses et aucune (dans les fameuses 200 premières) n'en traitait. Je suis vraiment désolé de t'embeter avec ce genre de ti probs surtout que tu sembles calé en C mais... Enfin bon voila à quoi ressemble le code que j'avais mis avec ta soluce. Merci encore a+ pitet.
 
Code:
 
cout << "Entrez le numero de la page contenant le mot ...";  
while ( ! (cin >> ValPg) )  
// le cin fonctionnait pas chez moi, j'avais une erreur !  
// Comment est ce possible??
{  
  cout << "Le numero de page est sence etre un entier !!!" << endl;  
  cout << "Entrez le numero de la page contenant le mot ...";  
  cin >> ValPg;  
}

mood
Publicité
Posté le 05-05-2004 à 15:10:27  profilanswer
 

n°716312
Taz
bisounours-codeur
Posté le 05-05-2004 à 15:16:55  profilanswer
 

cout << "Entrez le numero de la page contenant le mot ..." << flush;  
 
et voilà ... sinon tu fais quoi de nos conseils .. ça fait 3 postes ou on te dit que sur erreur, il faut vider cin et faire un .clear() et toi rien du tout ...
 

n°716392
Ace17
Posté le 05-05-2004 à 16:02:13  profilanswer
 

mono-neurone a écrit :

tu sembles calé en C  


Il est ou le C dans ce topic?...  :whistle:

n°716513
Mono-neuro​ne
Posté le 05-05-2004 à 16:56:00  profilanswer
 

Ben je l'avais déjà mis dans la source d'avant et je viens de le remettre mais ca change absolument rien (le clear)!!! Je pars dans une boucle folle et pi voila. Re voila le code tel qu'il est à présent.
 
 
cout << "Entrez le numero de la page contenant le mot ..." << endl;
while ( ! (cin >> ValPg) )  
{    
  cout << "Le numero de page est sence etre un entier !!!" << endl;  
  cout << "Entrez le numero de la page contenant le mot ..." << endl << flush;
  cin.clear();
  cin >> ValPg;  
}

n°716533
Taz
bisounours-codeur
Posté le 05-05-2004 à 17:08:53  profilanswer
 

Code :
  1. #include <sstream>
  2. #include <string>
  3.                                                                                              
  4. using namespace std;
  5.                                                                                              
  6. int main()
  7. {
  8.                                                                                              
  9.   int i;
  10.                                                                                              
  11.   for( ; ; )
  12.     {
  13.       cout << "1) saisissez un entier : " << flush;
  14.                                                                                              
  15.       if( cin >> i )
  16.         {
  17.           break;
  18.         }
  19.       else if(cin.bad())
  20.         {
  21.           cerr << "Erreur d\'E/S" << endl;
  22.           return 1;
  23.         }
  24.       else if (cin.eof())
  25.         {
  26.           cout << endl << "EOF, Bye" << endl;
  27.           return 0;
  28.         }
  29.       else
  30.         {
  31.           cin.clear();
  32.           cin.ignore(numeric_limits<int>::max(), '\n');
  33.         }
  34.     }
  35.                                                                                              
  36.   cout << "1) voila l'entier : " << i << endl;
  37. }

 
 
t'es vraiment un boolay ! faut te le dire combien de fois "faut vider cin :o"

n°716805
skelter
Posté le 05-05-2004 à 21:12:21  profilanswer
 

serve a quoi les else apres des break ou des return?

n°716808
Taz
bisounours-codeur
Posté le 05-05-2004 à 21:14:17  profilanswer
 

à rien au final. juste à montrer la structuration logique.
 
soit c'est ok,
sinon vérifier les erreurs d'E/S
sinon vérifier EOF
sinon c'est que la donnée ne correspond pas à ce que qu'on veut lire (problème de format)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Controle d'entier dans un cin !!!???

 

Sujets relatifs
VB6 Contrôle dataentier non-signés avec VB .NET
Enregistrement dans un controle data[VB] Propriété de type "index" d'un contrôle ActiveX ...
[excel]contrôle de doublons par inputbox?lecture midi et controle du volume
CONTROLE DE SAISIE[ASM] Conversion entier en chaine decimal
Gestionnaire de signaux + contrôle des filsControle activeX
Plus de sujets relatifs à : Controle d'entier dans un cin !!!???


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)