Quote:
il considere que le 2eme argument fait partie du 2e cin
En effet les flux du C++ lisent une ligne entière quand tu fais cin>> nbl;
Quote:
donc pour lui il considere un espace comme un delimiteur
En effet c'est spécifié comme ça dans le standard.
Quote:
comment puis-je faire pour que chaque demande se fasse sur une ligne pour chacunes
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 :) )
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 :) )