我重载了运算符>>
,我试图从文件中读取数据,即
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
导致缓冲区混乱。如何使这项工作?
答案 0 :(得分:1)
好的,我想我找到了解决方案。整个问题是在一个文件中有1154,5
而不是1 154,5
- 在这一点变化之后一切正常(没有任何ignore()
)。然而,有趣的是,11 541,5
也可以正常工作,但111 541,5
将四舍五入为111 542
(whyyyyyy)。
另一个有趣的问题是,为什么黑客<< store.surface_area_
以不同于>>
的格式保存数字正试图读取它。他们真的应该简化C ++中的编码,这会造成太多的麻烦。
编辑:事实并非如此,毕竟这是我的坏事。