Я пытаюсь удалить запись из файла bin.
Я попытался создать другой указатель и создать временный файл, чтобы записать в него данные, а затем из временного файла записать данные обратно в исходный файл. но главный вопрос в том, что нужно изменить в функции обновления зарплаты.
вот что я сделал до сих пор.
Итак, главная цель программы - если я введу дополнительные деньги, превышающие порог, я должен удалить запись. какие-либо предложения, что мне нужно изменить в функции обновления заработной платы?
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
typedef struct employee
{
int code;
char name[15];
float salary;
} Employee;
void create_bin(char *f, float* threshold);
void updateSalary(char* filename, float threshold);
void Display(char *fName);
void main() {
char filename[20] = "input.bin";
float threshold;
create_bin(filename,&threshold);
Display(filename);
updateSalary(filename, threshold);
Display(filename);
getch();
}
void create_bin(char *f,float* threshold){
FILE *f_b;
Employee emp1;
int object=0,number,i=0;
float amount;
f_b = fopen(f, "wb+");
if (!f_b) {
printf("unable to open file");
}
printf("How many Employees?");
scanf("%d",&number);
for (i = 0; i < number; i++) {
printf("Eneter employee Code:");
scanf("%d",&emp1.code);
rewind(stdin);
puts("Enter name");
gets(emp1.name);
printf("Eneter employee Salary:");
scanf("%f",&emp1.salary);
rewind(stdin);
object += fwrite(&emp1, sizeof(Employee), 1, f_b);
}
printf("Ente threshold:");
scanf("%.2f",&amount);
*threshold = amount;
printf("Total elements in file %d\n", object);
fclose(f_b);
}
void updateSalary(char* filename, float threshold)
{
float extra_money;
int i = 1;
Employee emp;
FILE *f = fopen(filename,"rb+");
FILE *f_temp = fopen("Final_file","wb+");
if (!f)
{
printf("File not found!\n");
return 0;
}
if (!f_temp) {
printf("File not found!\n");
return 0;
}
fread(&emp, sizeof(Employee), 1, f);
while (!feof(f))
{
printf("Enter how much money to add to #%d worker:",i++);
rewind(stdin);
scanf("%f",&extra_money);
emp.salary+= extra_money;
if (emp.salary <= threshold) {
fwrite(&emp, sizeof(Employee), 1, f_temp);
}
fread(&emp, sizeof(Employee), 1, f);
}
fread(&emp, sizeof(Employee), 1, f_temp);
while (!feof(f_temp)) {
fwrite(&emp, sizeof(Employee), 1,f);
fread(&emp, sizeof(Employee), 1, f_temp);
}
fclose(f_temp);
fclose(f);
}
void Display(char *fName)
{
Employee emp;
FILE *f = fopen(fName, "rb");
if (f)
{
fread(&emp, sizeof(emp), 1, f);
while (!feof(f))
{
printf("%9d %15s %8.2f\n", emp.code, emp.name, emp.salary);
fread(&emp, sizeof(emp), 1, f);
}
fclose(f);
}
}