c ++将struct保存到文件问题中

时间:2014-11-29 08:00:10

标签: c++

我的c ++函数存在问题,它将结构保存到文件中。它似乎可以正确保存所有内容,当我打开文件备份时,所有内容都已保存。但是当我再次运行程序时,由于某种原因,加载文件进入无限循环,我不确定为什么会发生这种情况。欢迎提出任何意见。

#include <iostream> 
#include <iomanip> 
#include <string> 
#include <cmath> 
#include <fstream> 

using namespace std;

struct account
{
    string acctNum;
    string name;
    float cBal;
    float sBal;
};

int menu();
char subMenu();
int loadCustomers(account[]);
void saveCusomers(account[], int);
int newCustomer(account[], int);
int deleteCustomer(account[], int);
int findCustomer(account[], int);
void deposit(account[], int);
void withdrawl(account[], int);
void balance(account[], int);
void bankBalance(account[], int);

int main()
{
    account acc[20];
    int selection;
    int numAcc = 0;

    numAcc = loadCustomers(acc);

    saveCusomers(acc, numAcc);

    return 0;
}



int loadCustomers(account acc[])
{
    ifstream inFile;
    int numCustomers = 0, i = 0;

    inFile.open("customer.dat");

    if (!inFile)
    {
        cout << "No customer file found." << endl;
    }

    else
    {   
        cout << "Customer file found..." << endl << endl;

        while (!inFile.eof())
        {
            getline(inFile, acc[i].acctNum, '#');
            getline(inFile, acc[i].name, '#');
            inFile >> acc[i].cBal;
            inFile.ignore();
            inFile >> acc[i].sBal;

            i++;
            numCustomers++;
        }

        cout << "Number of customers found in file: " << numCustomers << endl;
    }

    inFile.close();

    return numCustomers;
}

void saveCusomers(account acc[], int numCustomers)
{
    ofstream outFile;

    outFile.open("customer.dat");

    for (int i = 0; i < numCustomers; i++)
    {
        outFile << acc[i].acctNum;
        outFile << '#';
        outFile << acc[i].name;
        outFile << '#';
        outFile << acc[i].cBal;
        outFile << '#';
        outFile << acc[i].sBal;
        outFile << '#';
    }

    outFile.close();
}

我不确定我是在无限地保存它还是为什么它无限循环,任何评论都会有所帮助。

1 个答案:

答案 0 :(得分:1)

尝试替换

while (!inFile.eof())

 while(getline(inFile, acc[i].acctNum, '#'))

并删除 getline(inFile, acc[i].acctNum, '#');

中的第一个陈述