2011-11-28 41 views
0

我有一個小問題。我有三個文件,OldMaster,Transaction和NewMaster。如果OldMaster和Transaction之間的帳號匹配,我更新餘額並寫入NewMaster。如果它們不匹配,我將OldMaster中的原始帳戶信息寫入NewMaster並顯示錯誤。C++:文件處理:匹配順序文件

文件交易中有4個賬戶在文件OldMaster和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; 
} 
+0

對於做什麼原因,你需要第二個「如果」在施工'如果(使用accountNumber == accountNum)......否則**如果( accountNumber!= accountNum)**'?如果'accountNumber == accountNum'不是真的,那麼'accountNumber!= accountNum'肯定是真的,你不需要檢查。 – fogbit

回答

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());