从文件中读取不能按预期工作

时间:2017-01-08 00:11:09

标签: c++

我重载了运算符>>,我试图从文件中读取数据,即

Store first;
std::wifstream in("file.txt");
in >> first;

以下是代码:

std::wistream & operator >> (std::wistream &is, Store &store)
{
    std::size_t vec_size; // size of employees_ vector
    std::getline(is, store.name_);
    is >> store.surface_area_;
    std::wcout << store.surface_area_ << std::endl;
    is >> vec_size;         
    std::wcout << vec_size << std::endl;
    ...
    return is;
}

name_的类型为wstring

surface_area_的类型为double

file.txt的:

Euro AGD
1154,5
0
0

(我已设置波兰语$ LANG,这就是为什么有逗号而不是点的原因)

我得到的是:

1 154,5
4 519 717 136

如果我在getline之后添加is.ignore(),我会得到:

154,5
0

我的猜测是getline导致缓冲区混乱。如何使这项工作?

1 个答案:

答案 0 :(得分:1)

好的,我想我找到了解决方案。整个问题是在一个文件中有1154,5而不是1 154,5 - 在这一点变化之后一切正常(没有任何ignore())。然而,有趣的是,11 541,5也可以正常工作,但111 541,5将四舍五入为111 542(whyyyyyy)。

另一个有趣的问题是,为什么黑客<< store.surface_area_以不同于>>的格式保存数字正试图读取它。他们真的应该简化C ++中的编码,这会造成太多的麻烦。 编辑:事实并非如此,毕竟这是我的坏事。