从转换失败的ifstream获取数据

时间:2014-09-29 18:12:07

标签: c++ ifstream

我使用ifstream对象从文本文件中读取double

ifstreamObject >> floatVariable;

如果无法将读取转换为double,我想知道如何获取不可转换数据并将其转换为string?是否可以这样做而不首先将其存储为string,然后尝试转换它?

我想这样做,以便对象抛出异常。 catch - 块旨在处理不可转换为double的值,并将它们存储在单独的txt文件中以供以后分析。

2 个答案:

答案 0 :(得分:1)

使用tellg查找当前位置,如果转换失败,请使用seekg向后转换并将其转换为字符串。

答案 1 :(得分:1)

我想重要的是要记住清除读取失败时得到的错误:

int main()
{
    std::ifstream ifs("test.txt");

    float f;
    if(ifs >> f)
    {
        // deal with float f
        std::cout << "f: " << f << '\n';
    }
    else // failed to read a float
    {
        ifs.clear(); // clear file error

        std::string s;
        if(ifs >> s)
        {
            // now deal with string s
            std::cout << "s: " << s << '\n';
        }
    }
}

我建议不要使用try{} catch{}例外,因为不可转换的输入是 预期的 结果之一。这不是真正的 例外