2014-01-28 108 views
0

我有一些類似的代碼;從文件中添加和檢索類的對象 - C++

#include<iostream.h> 
#include<string.h> 
#include<conio.h> 
class MyClass{ 
    char mystring[10]; 
    int mynumber; 
public: 
    MyClass(){} 
    MyClass(char x[],int y){ 
    strcpy(mystring,x); 
    mynumber = y; 
    } 
    void disp(void){ 
    cout<<mystring<<" - "<<mynumber; 
    } 
    void read(void){ 
    cout<<"enter char and number\n"; 
    cin>>mystring>>number; 
    } 
} 

int main(){ 
    Myclass test[10]; 

    for(int i=0;i<9;i++){ 
    test[i].read; 
    //then store the object into file 
    } 

    //if user want to display data, then read from file like; 
    // string1 - 1234 
    // string2 - 3432 
    // string9 - 4830 

getch(); 
return 0; 

} 

我想儲存一些字符串和一個相關數字(如電話號碼簿)到一個文件,說myfile.txt爲二進制。數據文件可以存儲對象MyClass。如何將信息存儲到文件中並從文件中打印整個數據?不用做文件搜索。

+0

使用std :: string而不是C風格的字符串。 –

+0

@ThomasMatthews你能給我一個完整的答案,對不起,這是一個初學者:( –

+0

爲什麼你想介紹一個二進制文件的所有問題?例如,編譯器可能會添加結構成員之間的填充損壞關係。 ,ASCII中的文本與二進制文本相同,佔用相同的空間。 –

回答

0

喜歡使用std::string

class Phone_Entry 
{ 
    std::string name; 
    std::string phone_number; 
}; 

當寫入和讀取文件,你應該有對象執行I/O。 此外,由於字符串的長度不同(也稱爲可變大小記錄),因此您需要首先寫入長度然後寫入文本或者用結束標記寫入文本。

讓我們在同一行和電話號碼對另一個假設名稱:

class Phone_Entry 
{ 
    // as above 
    friend std::ostream& operator<<(std::ostream& out, const Phone_Entry& pe); 
    friend std::istream& operator>>(std::istream& inp, Phone_Entry& pe); 
}; 

std::ostream& 
operator<<(std::ostream& out, const Phone_Entry& pe) 
{ 
    out << pe.name << "\n"; 
    out << pe.number << "\n"; 
    return out; 
} 

std::istream& 
operator>>(std::istream& inp, Phone_Entry& pe) 
{ 
    std::getline(inp, pe.name); 
    std::getline(inp, pe.number); 
} 

現在你可以使用operator>>從文件中讀取您的條目:

std::ifstream phone_book_file("phone_book.txt"); 
Phone_Entry entry; 
phone_book_file >> entry; 

同樣,對於輸出:

cout << entry; 

閱讀C++ FAQ(搜索w eb for C++ FAQ)。