0

小さな問題があります。OldMaster、Transaction、および NewMaster の 3 つのファイルがあります。OldMaster と Transaction の口座番号が一致する場合は、残高を更新して NewMaster に書き込みます。一致しない場合は、元のアカウント情報を OldMaster から NewMaster に書き込み、エラーを表示します。

ファイル OldMaster には 4 つのアカウントがあり、ファイル Transactions には 4 つのアカウント トランザクションがあります。何らかの理由で、プログラムが各ファイルの 4 番目 (最後) のアカウント/トランザクションを処理しておらず、NewMaster がデータを受信して​​いません。

int accountNumber
int accountNum;
string lastName;
string firstName;
float currentBalance;
float dollarAmount;

inOldMaster >> accountNumber >> firstName >> lastName >> currentBalance;
inTransaction >> accountNum >> dollarAmount;

while ( !inOldMaster.eof() && !inTransaction.eof() )
{
    if ( accountNumber == accountNum )
    {
        currentBalance += dollarAmount;
        outNewMaster << accountNum << " " << firstName << " " << lastName << " " 
                     << currentBalance << endl;
    } 
    else if (accountNumber != accountNum)
    {
        outNewMaster << accountNumber << " " << firstName << " " << lastName << " " 
            << currentBalance << endl;
        cout << "Unmatched transaction record for account number: " << accountNum 
            << endl;
    }

    inOldMaster >> accountNumber >> firstName >> lastName >> currentBalance;
    inTransaction >> accountNum >> dollarAmount;
}
4

1 に答える 1

2

入力ファイルからデータを読み取るときに、ループ内でファイルの終わりに達すると、ループは続行されず、新しく読み取られたデータは書き出されません。

あなたの場合、私は次のようにします:

do
{
    inOldMaster >> accountNumber >> firstName >> lastName >> currentBalance;
    inTransaction >> accountNum >> dollarAmount;

    if (inOldMaster.bad() || inTransaction.bad())
        break;

    // Your old if-statements

} while (inOldMaster.good() && inTransaction.good());
于 2011-11-28T05:02:17.900 に答える