将文件中的整数读入具有单独成员变量的结构

Read Integers From a File Into A Struct with Separate Member Variables

我有一个包含此数据的文件:

3
0 0.5
1 0.23
100 -0.5

2
1 0.01
6 -0.55

我有两个私有成员 x 和 y 变量的私有结构和列表:

struct FTerm {
    int m_delay;
    double m_weight;
};

std::list<FTerm> m_xterms;
std::list<FTerm> m_yterms;

结果应包含

for 3 m_xterms:
m_delay contains 0, 1, 100
m_weight contains 0.5, 0.23, -0.5

for 2 m_yterms:
m_delay contains 1, 6
m_weight contains 0.01, -0.55

到目前为止我有这个:

ifstream filt(dlg.GetPathName());
    if (filt.fail())
    {
        AfxMessageBox(L"Failed to open filter transfer equation file");
        return;
    }

    int numXTerms;
    string line;

    while (getline(filt, line))
    {
        istringstream iss(line);
        FTerm term;
        while (iss >> numXTerms)
        {
            filt >> numXTerms >> term.m_delay >> term.m_weight;
            m_xterms.resize(numXTerms);
            m_xterms.push_back(term);
        }

    }

这是我从调试中得到的,所以我不确定它是否真的有效:

我还需要弄清楚如何在换行后获取 Y 值,有没有办法检查换行并编写另一个 while 循环?

你有几点不太对:

  • 由于已知项数,for 循环可能会更好
  • 向量可能比列表更好。
  • 您可以将数据直接提取到对象中,而无需增加字符串流的费用

像这样的东西应该可以工作:

std::vector<FTerm> m_xterms;
std::vector<FTerm> m_yterms;
int numFTerms;
std::string line;
filt >> numFTerms;
m_xterms.resize(numFTerms);

for (int i = 0; i < numFTerms; i++)
{
    FTerm term;
    filt >> term.m_delay >> term.m_weight;
    m_xterms[i] = term;
}
//ignore empty line
filt.ignore(1);
filt >> numFTerms;
m_yterms.resize(numFTerms);
for (int i = 0; i < numFTerms; i++)
{
    FTerm term;
    filt >> term.m_delay >> term.m_weight;
    m_yterms[i] = term;
}