2013-05-06 104 views
0

無法從文本文件讀取平行數組的信息。的信息被設置爲這樣的文件中:將文本文件逐行讀入並行數組C++

Name 
Street Address 
City, State, Zip 
Order size 

Name 
Street Address 
City, State, Zip 
Order size 

基本上我需要的姓名,街道地址,並作爲線條城市/州/郵編拉入的字符串數組,然後拉出的順序大小爲一個int數組做一些計算。共有4個陣列。

問題是,它會讀取一級就好了,但第二順序出現不同的輸入之後,所有的訂單只是顯示爲數字:

John Doe 
123 Main Street 
City, State Zipcode 

John Doe 
123 
Main Street 
City, State Zipcode 
9 
0 
9 
9 
4679937 
9 
0 
9 
9 
4710208 

而這裏的相關代碼:

const int ORDERS = 10; 
    cout << "Reading from file..." << endl; 
ifstream inputFile; 

string name[ORDERS], streetAddress[ORDERS], cityStateZip[ORDERS]; 
string line; 
int orderSize[ORDERS]; 

inputFile.open("Orders.txt"); 
for(int i = 0; i < ORDERS; i++) 
{ 
    getline(inputFile, line); 
    name[i] = line; 
    getline(inputFile, line); 
    streetAddress[i] = line; 
    getline(inputFile, line); 
    cityStateZip[i] = line; 
    inputFile >> orderSize[i]; 
} 

inputFile.close(); 

for(int i = 0; i < ORDERS; i++) 
{ 
    cout << name [i] << endl; 
    cout << streetAddress[i] << endl; 
    cout << cityStateZip[i] << endl; 
    cout << orderSize [i] << endl; 
} 

任何想法?似乎它試圖在第一個訂單或其他東西之後以整數形式讀取字符串。

+0

帶格式的提取操作符('>>')跳過空行。 'getline'沒有。 – 2013-05-06 19:42:53

+0

您可能還需要定期檢查流失敗,以幫助調試。 – 2013-05-06 19:44:05

+0

您描述了每個記錄佔用五行(四個加一個空白)的文件格式。但是,您所寫的代碼只能爲每條記錄讀取三行。有問題。 – john 2013-05-06 19:45:29

回答

1

>>提取操作符在輸入流中留下行的尾部\ n。因此下一個getline將不會讀取您想要的行,而是隻讀取訂單行的尾部\ n。要麼專門使用getline,並在事實之後從行中提取int,要麼確保在提取後跳過該行的其餘部分。

此外,本福伊特和約翰說。

+0

爲了確保我正確地包裝了我的頭,我最好使用getline 5x(4與數據,一個空白),然後只是將字符串轉換爲一個int並將其分配給適當的數組? – GranTurismo 2013-05-06 19:53:49

+0

是的,這就是我的建議。 – 2013-05-06 19:54:19

+0

真棒,謝謝大家! – GranTurismo 2013-05-06 19:55:52

相關問題