salut tout le monde
voici le code :
do{
cout << "nbr de ligne : "; cin>> nbl;
cout << "nbr de colonne : ";cin >> nbc ;
cout << "nbr de couleur : "; cin >> nbcoul ;
}while((is_int(nbl) <5 || is_int(nbl)>14) || (is_int(nbc) <5 || is_int(nbc)>14) || (is_int(nbcoul) <3 || is_int(nbcoul)>7)) ;
int VueConsole::is_int( const string & Str )
{
// créer un flux à partir de la chaîne donnée
istringstream iss( Str );
// créer un objet temporaire pour la conversion
int tmp;
// tenter la conversion et
// vérifier qu'il ne reste plus rien dans la chaîne
if( ( iss >> tmp ) && ( iss.eof()) )
return tmp;
else return -1;
}
au fait je demande a l utilisateur de mettre un nb de ligne de colonne et de couleur
mais mon soucis est que lorqu'il tape:
nbr de ligne : 5 5 nbr de colonne : nbr de couleur :
il considere que le 2eme argument fait partie du 2e cin
donc pour lui il considere un espace comme un delimiteur
comment puis-je faire pour que chaque demande se fasse sur une ligne pour chacunes
j'ai deja essayer getline(cin,nbl); mais au niveau de la methode is_int
si je met 5 dans le string en parametre il me retourne false alors que c est bien possible de le convertir en entier.
Cordialement.


En effet les flux du C++ lisent une ligne entière quand tu fais cin>> nbl;
En effet c'est spécifié comme ça dans le standard.
Ben tu l'as presque fait déjà. Au lieu de tester eof, simplmeent tu laisse tomber à la trappe ce qui traîne dna sle reste du stringstream. Ah et aussi, il est bon de tester fail() pour savoir si c'est bien un entier qui est extrait.
Exemple
#include <iostream> #include <string> #include <sstream> using namespace std; int readInt() { int v; string s; bool ok = false; while(!ok) { cout << "Donnez un entier: "; cin >> s; stringstream ss(s); ss >> v; if(ss.fail()) continue; else ok = true; } return v; } int main(int argc, char *argv[]) { int v = readInt(); cout << v << endl; }si tu donnes
1 -> tu récupères 1
1 2 -> tu récupères seulement 1
a -> on te demande de ressaisir
a1 -> on de demande de ressaisir
a 1 -> tu récupères 1 (attention :) )