ifstream只给了我16个元素



我的问题是:
Ifstream只给了我16个元素

您好,在我的 c++ 代码中,我有多个类。它们是:
-数据(包括一些数字)
-城镇(包括至少 2 个数据对象(在向量中)和州名称)
-县(管理城镇对象)

程序应该用给定文件的数据填充 Town 对象。代码如下所示:

国家。.CPP:

Country::Country(string file) {
  ifstream x(file);
  Town t;
  while (x.good()) {
    x >> t;
    this->towns.push_back(t);
  }
}

为了更深入地>">> t"看起来像这样:

镇。.CPP:

istream& operator>>(std::istream& is, Town& d) {
  is >> d.state>> d.town;
  Data a, b;
  a.SetYear(2011);
  is >> a >> b;
  // Some other code was here - but i think it's not relevant
return is;
}

为了更深入 ->">> a"看起来像这样:

数据。.CPP:

istream& operator>>(std::istream& is, Data& d) {
    return is >> d.total >> d.male >> d.female;
}

如您所见 - 城镇位于给定文件中。文件中的结构一遍又一遍地重复(总共:11292),看起来像这样:

来源(示例)

Baden-Württemberg
Kirchheim am Neckar
5225
2588
2637
5205
2608
2597
Baden-Württemberg
Kornwestheim
31053
15167
15886
31539
15502
16037

第一行:状态
第二线:镇
第 3-5 行和第 6-8 行:数据
重复

所以。。。由于某种原因,ifstream只给了我16个元素(16个城镇)。嗯....

使用 shift 运算符读取std::string只读取一个单词。默认情况下,单词由空格分隔。因此,不会完全读取字符串Kirchheim am Neckar,而只会读取Kirchheim。当尝试将am读取为整数时,流将进入失败模式并拒绝读取任何内容,直到其标志被clear()编辑。

您可能想通过阅读整行来阅读城镇,可能还有州。使用std::getline(stream, str)执行此操作。此外,始终在读取尝试测试读取操作是否成功。使用流的惯用方法是

while (x >> t) {
    ...
}

相关内容

  • 没有找到相关文章

最新更新