2014-04-23 3 views
0

좋아요. 그래서이 두 구조체를 txt 파일에 저장하는 함수로 보냅니다.파일에 구조체 정보 쓰기

struct Cost 
    { 
     double hours; 
     double cost; 
     double costFood; 
     double costSupplies; 
    }; 

struct Creatures 
{ 
    char name[50]; 
    char description[200]; 
    double length; 
    double height; 
    char location[100]; 
    bool dangerous; 
    Cost management; 
}; 

이 부분은 혼란스럽고,이 구조의 각 줄을 파일에 쓰는 방법을 모르겠다. 누군가 나에게이 일을 어떻게 설명 할 수 있습니까?

file.open(fileName, ios::out); 
if (!file) 
{ 
    cout << fileName << " could not be opened." << endl << endl; 
} 
else 
{ 

    fileName << c.name 
      << c.description 
      << c.lenght 
      << c.height 
      << c.location 
      << c.dangerious 
      << c.management.hours 
      << c.management.cost 
      << c.management.costFood 
      << c.management.costSupplies; 

      file.close(); 

    cout << "Your creatures where successfully save to the " << fileName << " file." << endl << endl 
     << "GOODBYE!" << endl << endl; 
} 
} 
+0

위의 두 구조에 대해 연산자 <<를 써야합니다. 그래서 당신은 당신의 프로그램에 있기를 원하는대로 사용할 수 있습니다. –

+0

나는 당신이 의미하는 바를 편집했다. – Baalzamon

답변

0

당신은 정의 된 클래스 비용생물오버로드 된 연산자 < <를 작성해야합니다. 다음과 같이

class Cost { 
public: 
friend std::ostream& operator<< (std::ostream& o, const Cost& c); 
// ... 
private: 
// data member of Cost class 
}; 
std::ostream& operator<< (std::ostream& o, const Cost& c) 
{ 
return o << c.hours<<"\t"<<c.cost<<"\t"<<c.costFood<<"\t"<<c.costSupplies<<std""endl; 
} 

이제는 당신이 그것을 사용할 수 있습니다 당신이 원하는 경우

Cost c; 
std::cout<<c<<"\n"; 

을이 개념에 대한 자세한 내용은이

http://isocpp.org/wiki/faq/input-output#output-operator

+0

전에 이런 걸 본 적이 없어요. 그 일을하는 간단한 방법이 있습니까? – Baalzamon

+0

@Baalzamon : 이것이 필요한 방법입니다. FAQ 페이지를 참조하고 isotream 개념에 대해 알아보십시오. ISOCPP FAQ에 제공된 프로그램을 사용/실행하여 학습을 시작할 수 있습니다. –

+0

정직하게도 우리는 다음 클래스 데이터 구조까지 이런 것들을 다룰 것이라고 생각하지 않습니다. 우리는 Advance file Operators를 사용해야합니다. 위에서 맹세 한 내용이 무엇인지 등. – Baalzamon

1

에 ISOCPP 자주 묻는 질문 (FAQ) 링크를 참조 할 수 있습니다 당신의 질문에 당신이 쓴 것과 같은 해결책은 당신이 쓰는 각각의 속성 후에 넣고 끝내는 것입니다.

fileName << c.name << std::endl 
<< c.description << std::endl 
... 

출력하려는 ​​정보가 모두 파일에있는 것이면 작동합니다.

그런 다음 작성한 순서대로 다시 읽을 수 있습니다. 공백이있는 문자열을 다시 읽을 때는 조심하십시오.

+0

+1. K.I.S.의 완벽한 예 원리. –