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

Controle d'entier dans un cin !!!??? - C++ - Programmation

Marsh Posté le 04-05-2004 à 13:00:37    

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+

Reply

Marsh Posté le 04-05-2004 à 13:00:37   

Reply

Marsh Posté le 04-05-2004 à 13:24:43    

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
Reply

Marsh Posté le 04-05-2004 à 13:26:15    

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

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

Reply

Marsh Posté le 04-05-2004 à 13:30:52    

> 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
Reply

Marsh Posté le 04-05-2004 à 13:42:13    

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;

Reply

Marsh Posté le 04-05-2004 à 14:02:52    

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...
Reply

Marsh Posté le 04-05-2004 à 14:23:20    

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...
Reply

Marsh Posté le 04-05-2004 à 16:16:22    

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;
}

Reply

Marsh Posté le 04-05-2004 à 16:27:24    

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

Reply

Marsh Posté le 05-05-2004 à 15:10:27    

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;  
}

Reply

Marsh Posté le 05-05-2004 à 15:10:27   

Reply

Marsh Posté le 05-05-2004 à 15:16:55    

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 ...
 

Reply

Marsh Posté le 05-05-2004 à 16:02:13    

mono-neurone a écrit :

tu sembles calé en C  


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

Reply

Marsh Posté le 05-05-2004 à 16:56:00    

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;  
}

Reply

Marsh Posté le 05-05-2004 à 17:08:53    

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"

Reply

Marsh Posté le 05-05-2004 à 21:12:21    

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

Reply

Marsh Posté le 05-05-2004 à 21:14:17    

à 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)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed