【发布时间】:2015-01-12 11:20:28
【问题描述】:
我正在尝试从文件中提取数据并将其放入 DataBlock 类型的动态数组中(DataBlock 是结构)。问题是在 for 循环的第一次迭代中正确提取了数据,但之后却没有。我已经调试过了,问题是在for循环的第一次迭代之后指针没有移动到下一行并将第一次迭代的最后一个值分配给整个数组。
编辑:现在我意识到问题是由于文件中的“****”,因为这些不是整数。但它们是必要的(它们有助于计算记录大小)有没有办法跳过带有“****”的行。 ?
这是文件中的数据:
3
4
2029
23
45
459
***
1
2
2015
3
4
20
***
当数据移动到数组并显示时,显示:
3
4
2029
23
45
459
***
459
459
459
459
459
459
***
代码如下:
DataBlock *writetoarray(string uname)
{
int size;
int data;
size = SizeOfArray(uname);
cout << "size:" << size << endl;
DataBlock *ptr = new DataBlock[size];
ifstream displayf;
displayf.open(uname.c_str());
int i = 0;
for (int i = 0; i < size; i++)
{
displayf >> data;
//istream& getline(displayf >> data);
ptr[i].date = data;
cout << ptr[i].date << endl;
displayf >> data;
ptr[i].month = data;
cout << ptr[i].month << endl;
displayf >> data;
ptr[i].year = data;
cout << ptr[i].year << endl;
displayf >> data;
ptr[i].hrs = data;
cout << ptr[i].hrs << endl;
displayf >> data;
ptr[i].min = data;
cout << ptr[i].min << endl;
displayf >> data;
ptr[i].bgl = data;
cout << ptr[i].bgl << endl;
displayf >> data;
cout << "***" << endl;
}
displayf.close();
return ptr;
}//function ends
我搜索了很多,但找不到解决方案。明天是提交日期。如果您能帮助我,我将不胜感激。如果需要任何进一步的信息,请告诉我。
添加更多细节: 这是数据块代码:
struct DataBlock
{
int date, month, year, hrs, min, bgl;
};
【问题讨论】:
-
你为什么不使用
getline(displayf, some_string, '\n'),然后以你想要的方式处理some_string? -
你能展示一下DataBlock结构吗
-
根据观察,星号不是数字,因此不能放入整数。我没有看到任何处理星号的代码;我建议使用 getline(..) 将每一行放入一个字符串中,如果字符串中的字符是星号,则应继续。
-
感谢您的回复。你能解释一下如何使用getline吗?需要进行哪些更改。我根本不擅长文件处理。
标签: c++ arrays for-loop struct file-handling