Non aspetta perché rimane uno \n all'interno del buffer di input, per l'input da tastiera, se bisogna fare tanto input, imho sarebbe meglio bufferizzare tutta una riga fino allo \n e poi leggere da lì.
Ad esempio una classe di utilità come questa farebbe comodo:
Codice:
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
class MyInputStream
{
istream ∈
istringstream currentLine;
bool lineRead;
public:
MyInputStream(istream &in): in(in), lineRead(false)
{
}
istringstream & getLine()
{
string str;
getline(in, str);
currentLine.clear();
currentLine.str(str);
lineRead = true;
return currentLine;
}
istringstream & getStream()
{
if(!lineRead)
getLine();
return currentLine;
}
};
int main(int argc, char** argv)
{
MyInputStream is(cin);
int i;
string str;
is.getLine() >> str;
is.getStream() >> i;
if(is.getStream().fail())
cout << "Errore" << endl;
else
cout << i << " " << str << endl;
is.getLine() >> i;
if(is.getStream().fail())
cout << "Errore" << endl;
else
cout << i << endl;
}
Chiaramente se la riga non contiene caratteri avrai un fail sullo stream. Nota che anche con cin dovresti sempre controllare se hai un fail, perché se richiedo un intero e si inserisce una stringa lo stream verrà settato su fail e così puoi gestire l'errore.