2013-04-19 5 views
0

내가해야 할 일은 텍스트 파일을 배열로 읽는 것입니다. 각 줄에는 4 개의 부분이 있습니다. 이름, 신분증, 신장, 체중. 텍스트 파일에는 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; 

그러나 더 나쁜, 당신의 행동을 정의되지 않은 for 루프를 수행 할 때 array[13]. 인덱스 13에 요소가 없으므로 이와 같이 액세스하려고 시도 할 수 없습니다. 조건을 ptr <= &array[12]으로 변경할 수는 있지만 여전히 매우 혼란 스럽습니다.

분명히 말하기를, 분명히 말한 것처럼 포인터 배열을 가지고 있지는 않습니다. 대신 배열은 person입니다.

ptr = &array[0]; 

이는 어레이 내의 제 person의 주소를 받아 포인터를 지정한다. 당신은 배열에 포인터 변환을 활용하여 훨씬 더 쉽게 할 수 있습니다

ptr = array; 

또한, 당신의 while 기준으로 eof()은 종종 아주 좋은 생각이 아니다. 다음 읽기 세트가 성공할 것인지 여부를 나타내는 좋은 지표는 아닙니다.

관련 문제