我想在C中執行以下操作。更新c中的隨機訪問文件
我有一個包含一些記錄的隨機訪問數據文件。
這些記錄的格式如下:
Acct# First Name Last Name Balance
0 "" "" 0.0
0 "" "" 0.0
0 "" "" 0.0
05 Joe Costanza 0.50
0 "" "" 0.0
0 "" "" 0.0
0 "" "" 0.0
19 Jason Bourne 58.00
0 "" "" 0.0
0 "" "" 0.0
42 Andy Der -15.12
0 "" "" 0.0
0 "" "" 0.0
我想從所有具有非零帳號和寫入新的更新後的餘額,以文件爲這些記錄的記錄減去結餘量。
這是我迄今爲止所嘗試完成的上述內容。
#include <stdio.h>
struct clientData
{
int acctNum;
char lastName[15];
char firstName[10];
double balance;
};
void textFile(FILE *readPtr);
int main(void)
{
FILE *cfPtr;
struct clientData client = {0, "", "", 0.0};
double serviceCharge = 5.0;
cfPtr = fopen("credit.dat", "rb+");
fread(&client, sizeof(struct clientData), 1, cfPtr);
client.balance -= serviceCharge;
fseek(cfPtr,(client.acctNum - 1) * sizeof(struct clientData)
, SEEK_CUR);
fwrite(&client, sizeof(struct clientData), 1, cfPtr);
fclose(cfPtr);
return 0;
}
無論我嘗試什麼,我都無法將單個更新的記錄寫回文件。我甚至嘗試過沒有任何while循環的單個記錄,或者如果語句不起作用。任何人都可以告訴我我錯過了什麼。
循環:
fread(&client, sizeof(struct clientData), 1, cfPtr);
while (!feof(cfPtr))
{
if (client.acctNum != 0)
{
client.balance -= serviceCharge;
fseek(cfPtr, (-1 * sizeof(struct clientData)), SEEK_CUR);
fwrite(&client, sizeof(struct clientData), 1, cfPtr);
}
fread(&client, sizeof(struct clientData), 1, cfPtr);
}
你'cfPtr'(未聲明的;打開,但不能使用),'filePtr'(既不申報,也不能打開,但寫入)和'readPtr'(既沒有聲明也沒有打開,但從中讀取)。這段代碼不會編譯。您能否告訴我們您使用的實際代碼,並告訴我們它做了什麼以及您希望它會做什麼? – 2011-04-06 23:17:36
如果大量不同名稱的文件變量指示您的代碼的某些版本試圖多次打開同一文件,請閱讀一個版本並寫入另一個版本:不要這樣做,如果您確實必須這樣做,那麼在寫入文件和嘗試讀取文件之間刷新文件。 – 2011-04-06 23:19:23