2017-12-07 4 views
0

안녕하세요, 파일을 읽고 구조체 배열의 파일에서 데이터를 가져올 필요가 있습니다.파일에서 구조체의 C++ 채우기 배열

구조

struct Activity { 
    string ID; 
    string Name; 
    string quantity; }; 

내가 파일

int* fillStructure(ifstream &fileActivity){ 


    int i=0; 
    int numberOfElements = numberOfLines(fileActivity); 

    Activity* myActivity = new Activity[numberOfElements]; 

    while (i < numberOfElements) 
    { 
      getline(fileActivity, myAktivity[i].ID, ','); 
      getline(fileActivity, myActivity[i].Name, ','); 
      getline(fileActivity, myActivity[i].quantity, '\n');  
      i++; 
    } 

    fileActivity.close(); 
    return myActivity; } 

에서 읽기 위해이 기능을 가지고 있고이 구조의 멤버를 인쇄하는 주요 기능에하려고 할 때 그것은

int main(){ 



    if (!(fileActivity.is_open())){ 
     cout << "Error when reading file" << endl; 
     return 0; 
    } 

    fillStructure(fileActivity); 

    cout << myActivity[1].ID << endl; return 0; } 

나는 일을 나던 초보자, 내가 잘못한 일을 도와 줄 수 있니?

+2

에 오신 것을 환영합니다 나를 위해 작동합니다. 당신이 잘못하고있는 첫 번째 일은 C++ 질문에 C 언어 태그를 사용하는 것입니다. 귀하의 코드는 유효한 C 코드가 아닙니다. 그런 다음 몇 페이지를 먼저 읽어야합니다. [둘러보기] (https://stackoverflow.com/tour) 및 [묻는 방법] (https://stackoverflow.com/help/how-to-ask). 이렇게하면 [MCVE] (https://stackoverflow.com/help/mcve)가 시작하는 것이 좋지 않다는 것을 알 수 있습니다. – Gerhardh

+0

'myActivity'는 지역 변수입니다. 'fillStructure' 함수 밖에서는 존재하지 않습니다. –

+0

fillStructure가 파일에서 데이터를 읽습니까? getline 함수는 무엇을합니까? 흥미로운 부분입니다. – user3532232

답변

3

myActivityvoid fillStructure(ifstream &fileActivity)에 신고했지만 int main()에서 액세스하려고했습니다.

0

main 함수에서 반환 값을 선언해야합니다.

struct Activity { 
string ID; 
string Name; 
string quantitiy; 
}; 

Activity* fillStructure(ifstream &fileActivity) { 

int i = 0; 
int numberOfElements = numberOfLines(fileActivity); 
Activity* myActivity = new Activity[numberOfElements]; 

while (i < numberOfElements) 
{ 
    getline(fileActivity, myActivity[i].ID, ','); 
    getline(fileActivity, myActivity[i].Name, ','); 
    getline(fileActivity, myActivity[i].quantitiy, '\n'); 
    i++; 
} 

fileActivity.close(); 

return myActivity; 
} 


int main(){ 

ifstream fileActivity ("test.txt", ifstream::in); 
Activity* retFile; 

retFile = fillStructure(fileActivity); 

cout << retFile[1].ID << endl; 

return 0; 
} 

이 같은 주요 함수에서 fillStructure 함수의 반환 유형을 선언 :

Activity* retFile; 

이 codesnippet는 SO