从txt文件读取到c ++中的结构

时间:2014-02-09 09:36:26

标签: c++ ifstream

为什么我的代码中的nr变量增加到5以上?

当我测试while循环迭代的次数时,它比我的数据文件中的元素循环的次数多,我无法理解为什么。

数据文件包含 - a 1 2 3 b

这是我的代码:

#include <fstream>
#include <iostream>
#include <string>

using namespace std;

struct SOMETHING 
{
    string string[10];
    int int_1[100];
};

void main() 
{
    int nr = 0;
    SOMETHING P;
    ifstream D("data.txt");

    while(!D.eof())
    {
        nr++;
        if (nr == 1 || nr % 5 == 0)
        {
            D >> P.string[nr]; 
            cout << P.string[nr] << " ";
        }
        D >> P.int_1[nr];
        cout << P.int_1[nr] << " ";

    }

    D.close();
} 

2 个答案:

答案 0 :(得分:1)

检查这个:

while(!D.eof())
{
    nr++;
    if (nr == 1 || nr % 5 == 0)
    {
        D >> P.string[nr]; 
        cout << P.string[nr] << " ";
    }
    D >> P.int_1[nr];
    cout << P.int_1[nr] << " ";

}

nr变量超过5的原因是,在每次成功读取每一行后,您都没有重置nr我不知道是否是你想要什么,但你实现它的方式有一个问题(见下文):

  • 您的结构元素显然有10个元素的空间,但您只需检查并存储索引1处的元素和5的倍数:0, 1, 5, 10, etc.

  • 使用eof方法是不好的做法,因为@ P0W在他的评论中已经注意到了。使用while循环代替std::getline

答案 1 :(得分:0)

ifstream的内部指针没有被更新,因此while循环将无限期地运行,因为eofbit永远不会被设置。