Я только начинаю изучать файлы. Для этого eI'm пытается создать программу, которая отслеживает записи транзакций в магазине. Первым шагом является запись дневных транзакций. Я создаю файл trans.c, который я могу открыть вместе с моим файлом main.c, чтобы отслеживать его. Затем я заполняю trans.c сначала пустыми структурами, чтобы выделить память для записей транзакций, а затем заполняю его структурами, содержащими данные клиента, используя fwrite.Написание структур в файл C
#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, чтобы увидеть, если он работал, файл остается пустым, и все же мой код компилируется без проблем, так и во время выполнения, я, кажется, не имею заполнение неприятности в структурирует и записывает их. Является ли файл заполненным в другом месте, или я чего-то не хватает/делаю это неправильно?
Изменения из 'fillTrans()', вероятно, будут потеряны, потому что вы не закрыли файл до его вызова. – Dmitri
Я не думаю, что если бы он увидел, что C автоматически закрывает файлы в конце функции, если они не были закрыты вручную, чтобы сохранить память. –
В конце * программы *, а не в конце функции. И 'main()' еще не закончился, когда вы вызываете 'fillTrans()'. – Dmitri