读一个“;”将分隔文件分隔成字符数组结构

时间:2011-05-23 01:30:05

标签: c++ arrays get ifstream

我试图从文本文件中读取一组值到数组结构数组中。每个条目用'\ n'分隔,每个条目由3个值组成,用';'分隔。

问题是,在正确读取第一行文件数据后,程序从第二行读取第一个值,然后似乎无法读取剩余的值。你能指出我的语法或逻辑中的错误吗?

测试数据显示在下方。

CS162;Finish Lab 2;9/26/2009
CS201;Take Quiz 1;9/28/2009

在读完测试数据后,我的程序输出如下。

Your tasks are:
Finish Lab 2 for CS162 is due 9/26/2009
CS201
 for  is due

将文件读入数组并输出数组内容的循环如下所示。我的完整代码将在问题的最后。

for ( ; InputFile.peek() != EOF; ListSize++ )
{
      InputFile.get(TaskList[ListSize].Course, BUFFERSIZE, ';');
      InputFile.ignore(BUFFERSIZE, ';');
      InputFile.get(TaskList[ListSize].Assignment, BUFFERSIZE, ';');
      InputFile.ignore(BUFFERSIZE, ';');
      InputFile.get(TaskList[ListSize].DueDate, BUFFERSIZE, ';');
      InputFile.ignore(BUFFERSIZE, '\n');
}

cout << "Your tasks are:" << endl;
for ( int Iteration = 0; Iteration <= ListSize; Iteration++ )
{
    cout << TaskList[Iteration].Assignment << " for " << TaskList[Iteration].Course << " is due " << TaskList[Iteration].DueDate << endl;
}

完全披露,这是针对计算机科学课程的。这就是为什么我不是要求完整的代码解决方案,只是帮助解决逻辑或语法错误。如果我以完全错误的方式这样做,请指出文档来帮助我。但这确实限制了我的代码。程序必须使用字符数组,而不是字符串。

2 个答案:

答案 0 :(得分:2)

也许最后得到的应该是:

InputFile.get(TaskList[ListSize].DueDate, BUFFERSIZE, '\n');

而不是

InputFile.get(TaskList[ListSize].DueDate, BUFFERSIZE, ';');

您的上一个字段(截止日期)最后没有分号,只有换行符。

更新:我建议你也考虑使用getline代替get。它们具有类似的功能,但getline也会使用分隔符,这意味着您不需要使用ignore()。

答案 1 :(得分:1)

如果不考虑您编写的代码,我只会说这种问题的正常模式是:

while(readline){processline; }

如果没有完全正确的内容,增量文件处理更有可能遇到问题。