我正在編寫一個程序,將結構寫入二進制文件,然後爲用戶提供編輯該文件的選項。然後程序應該在寫入原始結構的文件中重寫該部分。代碼:覆蓋二進制文件中的字段
struct Record
{
char name [16];
char phoneNum [16];
float balance;
};
int edit (fstream& ref)
{
char searchVal[16];
cout << "Enter customer name: ";
cin.ignore();
cin.getline(searchVal, sizeof(searchVal));
int position = -1;
Record buffer;
bool found = false;
while(!ref.eof() && !found)
{
position = ref.tellg();
ref.read(reinterpret_cast<char*>(&buffer), RECORD_SIZE);
if((strcmp(buffer.name,searchVal) == 0))
{
found = true;
cout << buffer.name << " found! " << endl;
cout << "Enter new customer name: ";
cin.getline(buffer.name, sizeof(buffer.name));
cout << "Enter new customer phone number: ";
cin.getline(buffer.phoneNum, sizeof(buffer.phoneNum));
cout << "Enter new customer balance: ";
cin >> buffer.balance;
ref.seekg(-(RECORD_SIZE), ios::cur);
ref.write(reinterpret_cast<char*>(&buffer), RECORD_SIZE);
position = ref.tellp();
break;
}
}
if(!found)
{
cout << "Record not found" << endl;
}
ref.clear();
ref.seekg(0L, ios::beg);
return position;
}
基本上,該記錄被發現,用戶可以通過「編輯」,但它是在文件的結尾寫的,我不知道爲什麼。我感謝你的幫助。
打開文件時提供了哪些選項? – Barmar 2013-02-11 03:50:21
我打開文件爲ref.open(「prog2.dat」,ios :: in,ios :: out,ios :: app,ios :: binary); – user2044676 2013-02-11 03:52:36