2015-01-08 55 views
0

所以我在C++編寫這個程序學校一切正常,直到我打開txt文件......所有我能看到的是中國的符號..任何人有一個想法?.txt文件顯示中國符號/ C++

這是我的代碼。不介意未完成的搜索功能和其他東西。

#include <iostream> 
#include <fstream> 

using namespace std; 

fstream data_file; 
struct depositor 
{ 
    char name[20]; 
    char last_name[30]; 
    char address[60]; 
}; 

void add_depositor(depositor p_Info); 
void search_depositor(); 

void add_depositor(depositor p_Info) 
{ 
    data_file.open("Data.txt", ios::app); 
    if (data_file.fail()) 
    { 
     cout << "Error while opening the file!"; 
     exit(1); 
    } 
    else 
    { 
     data_file.write((char*)(&p_Info), sizeof(depositor)); 
     data_file.close(); 
    } 
} 

int menu() 
{ 
    int choice; 
    do 
    { 
     cout << "\n* Menu *"; 
     cout << "\n* 1. Add depositor! *"; 
     cout << "\n* 2. Search for depositor! *"; 
     cout << "\n* 3. Exit program! *"; 
     cout << "\n* Enter your choice: "; 
     cin >> choice; 
     cout << "\n* You chose: " << choice; 
    } while (choice < 1 || choice > 4); 
    return choice; 
} 
void main() 
{ 
    depositor p; int choice; 
    do 
    { 
     choice = menu(); 
     switch (choice) 
     { 
     case 1: cout << "\n Enter first name: "; 
      cin >> p.name; 
      cout << "\n Enter last name: "; 
      cin >> p.last_name; 
      cin.clear(); 
      cin.ignore(2000, '\n'); 
      cout << "\n Enter address: "; 
      cin.getline(p.address, 60); 
      add_depositor(p); break; 
     case 2: cout << ""; 
     default: cout << "\n* End of program! *"; 
     } 
    } while (choice != 4); 
} 

這是我在txt文件獲得:

+0

和你有什麼期望看到? – bluefog

+0

記事本誤解了文件,因爲它裏面有二進制數據。你只需要寫文本。 –

+0

@MarkRansom:那是什麼「二進制數據」? –

回答

1

我覺得你的問題是,你只是傾銷凡是你必須在你的結構到文本文件(無論是良好的數據或沒有)。您可能想要使用< <而不是寫入來分隔各個方法和輸出。

data_file << p_Info.name << ' ' << p_Info.last_name << ' ' << p_Info.address; 
+0

感謝您的快速響應! :) – Puff

+0

不客氣! –

1

你現在的樣子對象數據寫入文件:存儲

data_file.write((char*)(&p_Info), sizeof(depositor)); 

的數據是沒有被編碼以供文本編輯人員閱讀。但是它可以用於對象序列化以供以後檢索。

要存儲在文本形式,其可以用記事本可以看出數據:

data_file << p_Info.name << " "<<p_Info.last_name<<" " << p_Info.address << "\n"; 

以這種方式,數據被存儲在ASCII格式。

如果您需要序列化對象,

data_file.open("Data.dat", ios::app | ios::binary); //Its not a text file anymore and has to be opened in binary mode. 
if(!data_file){ 
    cout<<"\nError"; 
} 
else{ 
    data_file.write((char*)(&p_Info), sizeof(depositor)); 
} 
data_file.close(); 
+0

謝謝!有效。 :) – Puff

+0

一個投票會比一個感謝評論更好! :) – bluefog

+0

我只是讓我的acc ...它說我需要atleast 15代表:D – Puff