C ++使用ifstream从dat文件加载数据

时间:2018-03-26 18:12:56

标签: c++ ifstream

我正在为学校开展一个项目,其中我们要做的一部分就是以团队名称的形式保存数据,然后将几个整数转换为.dat文件,并在程序是下一次运行。

注意:counter是一个变量,用于记录文件中存在的团队数量,在此实例中设置为3

    void load(int counter)
    {
        ifstream infile("saveFile.dat");
        string temp[25];
        int temp2[25][8];

        for (int i = 0; i < counter; i ++)
        {

            getline(infile, temp[i]);

            for (int j = 0; j < 7; j++)
            {
                infile >> temp2[i][j];
            }

        }

        cout << counter;

        for (int i = 0; i < counter; i++)
        {
            string name = temp[i];
            int gamesPlayed = temp2[i][0], wins = temp2[i][1], draws = temp2[i] 
   [2], losses = temp2[i][3],
                goalsFor = temp2[i][4], goalsAgainst = temp2[i][5], points = 
    temp2[i][6];
            CFootballTeam t(name, gamesPlayed, wins, draws, losses, goalsFor, 
    goalsAgainst, points);
            table[i] = t;
        }
    }

这是我的加载功能看起来像但它似乎卡在文件的第二行,并返回一个空格,然后为每个团队返回-858993460后,第一次提示它没有读取任何数据,即使数据是现在,这是我的saveFile.dat文件的内容:

Manchester United
3 4 4 4 5 4 5
Manchester City
3 4 4 4 4 4 5
Chelsea
4 4 4 4 4 4 5

有谁能告诉我如何让程序继续阅读其余的部分,而不仅仅是第1行和第2行?

由于

1 个答案:

答案 0 :(得分:1)

问题在于你没有阅读你期望的内容。执行getline()时,程序会读取流中的所有内容,直到它到达\n,然后丢弃它。执行>>时,它会一直读到白色空间,但会在流中留下空白区域。这意味着当你完成第一次迭代时,你就拥有了一切,但是在最后>>,你将离开\n字符。然后当你执行下一个getline()时,它会读入\n,给出一个空字符串,然后对文本执行>>,并且不再将所有内容都放在正确的变量中。您的输入看起来像这样:

Original Data
Manchester United\n
3 4 4 4 5 4 5\n
Manchester City\n
3 4 4 4 4 4 5\n
Chelsea\n
4 4 4 4 4 4 5\n

After getline()
3 4 4 4 5 4 5\n
Manchester City\n
3 4 4 4 4 4 5\n
Chelsea\n
4 4 4 4 4 4 5\n

After >>
\n
Manchester City\n
3 4 4 4 4 4 5\n
Chelsea\n
4 4 4 4 4 4 5\n

这意味着编译器可能会将值设置为某个默认值,在您的情况下,它看起来像是最小值。您需要做的是在每次迭代结束时添加inFile.ignore()以从整数行的末尾清除\n