Problema con stringstream

di il
4 risposte

Problema con stringstream

Ho queste 2 funzioni. Una che mi ritorna un oggetto da una textbox con scritto numero+l+numero+l e un'altra che mi ritorna un double dalla stessa textbox se ho scritto solo un double.
T* check1(Window * w)
{

    double n1, n2;
    char l1, l2;
    stringstream ss;
    QString text1=w->text->text();
    ss<<text1.toStdString();
    ss>>n1;
    if (!ss.good() || n1<=0)
    {
        throw TSyntaxError();
    }
    ss>>l1;
    if (l1!='l')
    {
        throw TSyntaxError();
    }
    ss>>n2;
    if (!ss.good() || n2<0)
    {
        throw TSyntaxError();
    }
    ss>>l2;
    if (l2!='l')
    {
        throw TSyntaxError();
    }
    w->objtype->setText("T");
    return new T(n1, n2);
}
double check2(Window * w)
{
    double numb;
    stringstream ss1;
    QString textdouble=w->text->text();
    ss1<<textdouble.toStdString();
    ss1>>numb;
    if (!ss1.good() || numb<0) 
    {
        throw SyntaxError();
    }
    return numb;
}
La prima funziona perfettamente. La seconda che è pressoché identica, mi da sempre l'eccezione in quando il good dello stream non è a 0, ma ha l'eof=1 (per funzionare ho messo fail() al posto di good(), ma vorrei capire perché da sempre eof=1).

4 Risposte

  • Re: Problema con stringstream

    Io farei una cosa del genere
    
        double check2(Window * w)
        {
            double numb;
            stringstream ss1;
            QString textdouble=w->text->text();
            ss1<<textdouble.toStdString();
            if(ss1>>numb)
                return numb;
            else
               throw SyntaxError();
        }
    
    Ti ritorna eof perché e stato raggiunto la fine dello stringstream. Te devi verificare se l'estrazione è avvenuta non com'è lo stato dello stringstream.
  • Re: Problema con stringstream

    Quindi basta controllare solo il fail() oppure fare come hai detto te. Grazie
  • Re: Problema con stringstream

    
    eofbit	The end of the source of characters is reached during its operations.
    failbit	The input obtained could not be interpreted as an element of the appropriate type.
    Notice that some eofbit cases will also set failbit.
    
    Quando l'operatore >> fallisce mette in fail lo stream. Quindi puoi verificare lo stato fail oppure come ho detto io che è la stessa cosa.
  • Re: Problema con stringstream

    Io pensavo che se riuscivo a prendere, allora il good era sempre 0. Credevo che l'eof fosse per arresti inattesi. Che stupido XD
Devi accedere o registrarti per scrivere nel forum
4 risposte