Question

Ci-dessous mon fonct. Je l'appelle avec

if(try_strtol(v, rhs))

et ERS = "15 \ t // commentaire"

bool try_strtol(int64_t &v, const string& s)
{
    try
    {
        std::stringstream ss(s);
        if ((ss >> v).fail() || !(ss >> std::ws).eof())
            throw std::bad_cast();
        return true;
    }
    catch(...)
    {
        return false;
    }
}

Il retourne false, i, sauf le cas avec v = 15. Comment puis-je résoudre ce problème?

Était-ce utile?

La solution

Si vous voulez revenir un booléen, faites ceci:

bool try_strtol(int64_t &v, const string& s)
{
    std::stringstream ss(s);
    return (ss >> v).fail() || !(ss >> std::ws).eof();
}

Et il est défaillant parce qu'il est un mauvais casting. Avez-vous espériez le commentaire serait ignoré?

Autres conseils

Pourquoi pensez-vous que (ss >> std::ws).eof() pour être vrai? rhs contient des caractères non-blancs après 15, de sorte que la condition sera si vrai et l'exception sera levée, ce qui est la raison pour laquelle il retourne faux.

Après std :: ws Ignore l'onglet, vous n'êtes pas EOF encore.

Si vous où attendre ce flux IO traiterait le commentaire de C comme espace blanc, ce n'est pas le cas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top