0
嗨我正在製作一個簡單的類程序,用於使用結構將客戶記錄存儲在二進制文件中。
問題與「顯示全部」功能 到目前爲止,我可以將記錄添加到二進制文件,但是當我嘗試使用我的DisplayAll函數列出所有文件項時,它只是向我吐出垃圾。二進制文件中的結構輸出返回垃圾
二進制文件的簡單讀取功能工作正常,所以我可以一次讀取一個文件。 我想知道如果問題是與我的代碼中的邏輯。
我調試,但最終在fstream內置代碼。
*/ Program #2
This program will use structs to store data about
accounts */
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
const int SIZE = 16;
**struct Cust
{
char name[SIZE];
char phone[SIZE];
float accountBal;
};**
// Function Prototypes
// Function to enter new records into file.
// Function to display menu
void menu();
void addCust(fstream&);
void displayAll(fstream&);
int main()
{
char choice [4];
fstream custBinFile; // Filestream for I/O to Binary File
// Opening Binary File for Both input and output.
custBinFile.open("custBinFile.dat", ios::out|ios::in|ios::binary);
cout<< "Enter any choice from the above Menu List:"<<endl;
do
{
menu();
cin >> choice;
// If to handle adding a record to file
**if((strcmp(choice, "A") == 0) || (strcmp(choice, "a") == 0))
{
addCust(custBinFile);
}**
// Displaying one record from File
else if((strcmp(choice, "F") == 0)|| (strcmp(choice, "f") == 0))
{
cout << "Find and Display record \n" << endl;
}
// Handles deleting customer record
else if((strcmp(choice, "D") == 0)|| (strcmp(choice, "d") == 0))
{
cout << "Delete Customer Record \n" << endl;
}
// Find and Change record
else if((strcmp(choice, "C") == 0)|| (strcmp(choice, "c") == 0))
{
cout << "Find and Change Record \n" << endl;
}
// Displays all contents sorted in order
**else if((strcmp(choice, "L") == 0)|| (strcmp(choice, "l") == 0))
{
displayAll(custBinFile);
}**
// handles Bad input: Input Validation
else if((strcmp(choice, "E") != 0)|| (strcmp(choice, "e") != 0))
cout << "Bad input, you twit!! Change that" << endl;
} while((strcmp(choice, "E") != 0) && (strcmp(choice, "e") != 0));
cout << "Exiting now ";
custBinFile.close();
return 0;
}
void menu()
{
cout<< "Main Menu"<<endl;
cout<< " \n";
cout<< "A - Add Customer Record \n";
cout<< "F - Find and Display Record\n";
cout<< "D - Delete Customer Record\n";
cout<< "C - Change Customer Record\n";
cout<< "L - List All Records\n";
cout<< "E - Exit\n";
cout<< " \n";
cout<< "Enter letter corresponding to your choice:"<<endl;
}
**void addCust(fstream& custBinFile)
{
// Initialise Variables
Cust custType;
// User inputs record Info.
cout << "Enter the customer's name: ";
cin >> custType.name;
cout << "\n Phone Number: ";
cin >> custType.phone;
cout << "\n Account Balance: ";
cin >> custType.accountBal;
// If empty record found in File, search it and overwrite it with new record
// Otherwise, add record to Binary File.
// Open record to Binary File.
custBinFile.write(reinterpret_cast<char *> (&custType), sizeof(custType));
}**
**void displayAll(fstream& custBinFile)
{
// Displaying all Structs in File.
Cust custType;
while(!custBinFile.eof())
{
custBinFile.read(reinterpret_cast<char *> (&custType), sizeof(custType));
cout << "Customer Name: " << custType.name << endl;
cout << "Customer Phone Number: " << custType.phone << endl;
cout << "Customer Account Balance: " << custType.accountBal << endl;
}
}**
是的,我使用seekg和seekp函數修復了它。現在編正在研究最後兩個功能。 – onelovelxg 2012-02-08 05:28:16