View Single Post
Old 20-12-2008, 10:20   #2
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
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 &in;
    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.
cionci è offline   Rispondi citando il messaggio o parte di esso