2013-04-19 62 views
0

我需要做的是將文本文件讀入數組。每行有四個部分;名字,身份證,身高和體重。文本文件中有13行,所以我需要做13次。我將編寫一個循環來使其工作(並且將在函數中解析數組)。我知道如何使用基本數組來完成它,但是我們應該爲此使用結構。我環顧四周試圖找出如何做到這一點,但沒有什麼是真的爲我工作。這是我迄今爲止的代碼。如何將文本文件讀入指針數組? (C++)

#include <iostream> 
#include <fstream> 
#include <iomanip> 
#include <string> 
using namespace std; 
struct person 
{ 
string firstname; 
int id; 
double height; 
double weight; 
}; 
int main() 
{ 
person array[13]; 
person *ptr; 
ptr = &array[0]; 
ifstream inData; 
inData.open("peeps.txt"); 
while(!inData.eof()) 
{ 
    for(ptr = &array[0]; ptr < &array[13];ptr++) 
    { 
     inData >> person[ptr].firstname >> person[ptr].id 
     >> person[ptr].height >> person[ptr].weight; 


    } 
} 
} 

回答

1

你這樣做的方式相當混亂,但它幾乎是正確的。在for循環內,您試圖索引person,這是一個類。這沒有什麼意義。取而代之的是,你有指向每個在每次迭代數組中的person對象ptr,所以你可以取消對它的引用,並分配給其成員:

inData >> ptr->firstname >> ptr->id 
>> ptr->height >> ptr->weight; 

然而,更糟的是,你未定義行爲當你做array[13]時,for循環。索引13沒有元素,因此您不能嘗試像這樣訪問它。您可以將條件更改爲ptr <= &array[12],但仍然非常混亂。

但要明確的是,你絕對沒有像你所說的指針數組。相反,您有一組person s。

ptr = &array[0]; 

這需要在陣列中的第一person的地址,並分配它的指針。你可以通過陣列到指針轉換的優勢,更容易做到這一點:

ptr = array; 

此外,eof()爲您while標準往往不是一個很好的主意。它不能很好地表明下一組讀數是否會成功。