2011-05-23 87 views
2

我想從文本文件讀取一組值到數組結構數組中。這些條目各以'\ 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

也許是最後一個GET應該是:

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

,而不是

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

你的最後一個字段(到期日)沒有在最後一個分號,僅一個換行符。

更新:我建議你也看看使用getline而不是get。它們具有類似的功能,但getline也會使用分隔符,這意味着您不需要使用ignore()。

+0

非常感謝你,就是這樣。然後我想,我一定更累。 – cyotee 2011-05-23 01:35:41

+0

我會的,但我們被指示使用get。 – cyotee 2011-05-23 01:52:17

1

沒有想到你寫的代碼,我只想說,我這種類型的問題,正常的模式是:

一段時間(的ReadLine){ProcessLine從; }

如果您沒有完全正確的一切,增量文件處理更可能會遇到問題。

相關問題