我试图从文本文件中读取一组值到数组结构数组中。每个条目用'\ 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;
}
完全披露,这是针对计算机科学课程的。这就是为什么我不是要求完整的代码解决方案,只是帮助解决逻辑或语法错误。如果我以完全错误的方式这样做,请指出文档来帮助我。但这确实限制了我的代码。程序必须使用字符数组,而不是字符串。
答案 0 :(得分:2)
也许最后得到的应该是:
InputFile.get(TaskList[ListSize].DueDate, BUFFERSIZE, '\n');
而不是
InputFile.get(TaskList[ListSize].DueDate, BUFFERSIZE, ';');
您的上一个字段(截止日期)最后没有分号,只有换行符。
更新:我建议你也考虑使用getline
代替get
。它们具有类似的功能,但getline也会使用分隔符,这意味着您不需要使用ignore()。
答案 1 :(得分:1)
如果不考虑您编写的代码,我只会说这种问题的正常模式是:
while(readline){processline; }
如果没有完全正确的内容,增量文件处理更有可能遇到问题。