gpt4 book ai didi

c - 将结构写入文件 C

转载 作者:太空宇宙 更新时间:2023-11-04 03:37:36 25 4
gpt4 key购买 nike

我刚刚开始学习文件。为此,我正在尝试创建一个程序来跟踪商店中的交易记录。第一步是记录一天的交易。我创建了一个文件 trans.c,我可以将其与 main.c 文件一起打开,以便对其进行跟踪。然后,我首先用空结构填充 trans.c,为交易记录分配内存,然后使用 fwrite 用包含客户端数据的结构填充它。

#include <stdio.h>
#include <stdlib.h>

/*
*
*/
struct clientData {
int num;
char fName [20];
char lName[20];
long double balance;

};

void createFiles (FILE *fNew, FILE *fOld, FILE *fTrans, struct clientData x);
void fillTrans (FILE *fTrans, struct clientData x);

int main() {

FILE *fTrans; //transaction file
FILE *fNew; //new master file
FILE *fOld; //old master file

struct clientData blankClient = {0, "", "", 0.0 };


if ((fTrans = fopen("trans.c", "wb")) == NULL) {
printf("Error. File could not be opened.\n");
}

else {
int i;
for (i = 1; i <= 100; i++) {
fwrite(&blankClient, sizeof(struct clientData), 1, fTrans);
}
}

fillTrans(fTrans, blankClient);

}

void fillTrans(FILE *fTrans, struct clientData x) {

if ((fTrans = fopen("trans.c", "a+")) == NULL) {
printf("File could not be opened.");
}

else {
printf("Enter the account info, or 0 to quit.\n");
scanf("%d%s%s%Lf", &x.num, x.fName, x.lName, &x.balance);

while (x.num!= 0) {

fseek(fTrans, (x.num - 1) * sizeof(struct clientData), SEEK_SET);
fwrite(&x, sizeof(struct clientData), 1, fTrans);
fscanf(stdin, "%d%s%s%Lf", &x.num, x.fName, x.lName, &x.balance);

}

fclose(fTrans);
}
}

当我返回 trans.c 查看它是否有效时,文件仍然是空的,但我的代码编译没有问题,并且在运行时我似乎没有遇到填充结构和编写它们的问题in. 文件是在其他地方填写的,还是我遗漏了什么/做错了什么?

最佳答案

你在 main 中打开“trans.c”,然后调用 fillTrans() 而没有先关闭它——所以你在 fillTrans 中写入数据时打开了文件两次()。如果您运行此设置的设置允许两次打开都成功(在某些情况下,文件锁定会阻止它),那么最后一个关闭的设置可能决定文件的最终内容。由于 main() 没有关闭它(因此它的副本在程序结束时关闭),您最终得到 main() 放入文件中的任何内容并丢弃fillTrans() 写入了第二个FILE *

可能会在文件中以 一些 来自 fillTrans() 的写入结束(如果它没有追加),但文件大小会仍然由 main() 所具有的内容以及文件的哪些部分的数据不容易预测而确定。

此外,如果来自 fillTrans() 的写入确实保留,它们将被添加到文件的末尾,在 main() 写入的任何内容之后已经刷新到磁盘(如果有的话),因为 fillTrans() 在追加模式下打开。

关于c - 将结构写入文件 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31194272/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com