Привет. Я делаю простую программу класса для хранения записей о клиентах в двоичном файле, используя структуры.
Проблема связана с функцией «Показать все».используя мою функцию 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;
}
}**