【发布时间】:2021-11-14 00:32:24
【问题描述】:
我有两个文件要读取。其中之一包含两列,例如:
Account Number Amount
100 27.14
300 62.11
400 100.56
900 82.17
另一个文件有5列,内容如下:
Account Number Name Surname Balance
100 Alan Jones 348.17
300 Mary Smith 27.19
500 Sam Sharp 0.00
700 Suzy Green -14.22
我想比较两个文件的账号,把第一个文件的余额加上第二个文件的余额。到目前为止,我尝试从第一个文件中获取帐号并将其打印在屏幕上。我尝试使用fread 函数,但它不起作用。
我的尝试是:
struct clientData{
unsigned int acctNum;
char name[20];
char surname[20];
double balance;
};
int main(){
FILE *fPtr, *fPtr2;
if(!(fPtr = fopen("transaction_file.txt", "r"))){
printf("[ERROR] File could not be found!\n");
return;
}
fseek(fPtr, (0) * sizeof(struct clientData), SEEK_SET);
struct clientData client = {0, "", "", 0.0};
//read record from file
fread(&client, sizeof(struct clientData), 1, fPtr);
printf("%-6u%10.2lf\n\n", client.acctNum, client.balance);
}
【问题讨论】:
-
信息可能以纯文本形式存储,因此您不能将
fread直接发送到client,您必须先解析输入。 -
那些“5 列”在我看来很像 4 列。
-
它们是文本文件,因此使用
fgets()读取每一行然后提取信息,可能使用sscanf()或strtok()等等。 -
要“将第一个文件的余额添加到第二个文件的余额”,您需要创建一个包含所有数据和修改后余额的新文件。
-
我不确定它是否真的有效:fread(&client, sizeof(struct clientData), 1, fPtr); -> 你怎么知道 fread 将数据准确地放入 clientData 结构的字段中?你用gdb检查了吗?在我看来,您应该首先解析数据,或者至少知道文件中的余额数据放在哪个offest数据上。然后你可以将行读入缓冲区并将余额从固定位置复制到其他缓冲区,甚至转换(atoi,scanf)等