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