Я пытаюсь выяснить, что заставляет этот l oop обрабатывать мои структуры, а затем продолжать создавать значение tra sh, внутренний l oop работает и обновляет зарплаты, а внешний l oop, который я использовал раньше как автономный (если я использую только функцию печати, которая работает с тем же, пока l oop, не проходя через эту функцию, она напечатает мои 2 структуры без значений tra sh), и это сработало:
while (fread(&worker, sizeof(Employee), 1, file1) == 1)
{
fseek(file2, 0, SEEK_SET);
while (fread(&salary, sizeof(SalaryIncrement), 1, file2) == 1)
{
if (worker.id == salary.idEmployee)
{
worker.salary += salary.Salaryincrement;
fseek(file1, -ByteEmpolyee, SEEK_CUR);
fwrite(&worker, ByteEmpolyee, 1, file1);
}
}
}
я также добавляю свой полный код, если кто-то хочет его посмотреть, заранее спасибо
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
typedef struct
{
long id;
char name[20];
float salary;
}Employee;
typedef struct
{
long idEmployee;
float Salaryincrement;
}SalaryIncrement;
void AddingEmployee(char* fileName);
void AddingSalaryIncrement(char* filename);
void UpdateSalary(char* filename, char* filename1);
void printEmployee(char* filename);
void main()
{
AddingEmployee("ListEmployees.bin");
AddingSalaryIncrement("SalaryIncrement.bin");
UpdateSalary("ListEmployees.bin", "SalaryIncrement.bin");
printEmployee("ListEmployees.bin");
system("pause");
}
void AddingEmployee(char* filename)
{
FILE* file1 = fopen(filename, "ab");
if (file1 == NULL) {
printf("Unable to open file.\n");
exit(1);
}
Employee worker;
printf("Adding a new employee:\n");
printf("\nPlease enter the employee's ID , name, Salary: ");
scanf("%ld %s %f", &worker.id, worker.name, &worker.salary);
fwrite(&worker, sizeof(Employee), 1, file1);
fclose(file1);
}
void AddingSalaryIncrement(char* filename)
{
FILE* file1 = fopen(filename, "ab");
if (file1 == NULL) {
printf("Unable to open file.\n");
exit(1);
}
SalaryIncrement salary;
printf("Add SlaryIncrement:\n");
printf("Please inset the following: ID , salaryincrement: ");
scanf("%ld %f", &salary.idEmployee, &salary.Salaryincrement);
fwrite(&salary, sizeof(SalaryIncrement), 1, file1);
fclose(file1);
}
void UpdateSalary(char* filename, char* filename1)
{
Employee worker;
SalaryIncrement salary;
FILE* file1 = fopen(filename, "rb+");
if (file1 == NULL) {
printf("Unable to open file.\n");
exit(1);
}
FILE* file2 = fopen(filename1, "rb");
if (file2 == NULL) {
printf("Unable to open file.\n");
exit(1);
}
int ByteEmpolyee = sizeof(Employee);
int ByteSalary = sizeof(SalaryIncrement);
while (fread(&worker, sizeof(Employee), 1, file1) == 1)
{
fseek(file2, 0, SEEK_SET);
while (fread(&salary, sizeof(SalaryIncrement), 1, file2) == 1)
{
if (worker.id == salary.idEmployee)
{
worker.salary += salary.Salaryincrement;
fseek(file1, -ByteEmpolyee, SEEK_CUR);
fwrite(&worker, ByteEmpolyee, 1, file1);
}
}
}
fclose(file1);
fclose(file2);
}
void printEmployee(char* filename)
{
Employee worker;
FILE* file1 = fopen(filename, "rb");
if (file1 == NULL) {
printf("Unable to open file.\n");
exit(1);
}
while (fread(&worker, sizeof(Employee), 1, file1) == 1)
{
printf("ID: %ld\t\t Name: %s\t\t Salary: %0.2f\n", worker.id, worker.name, worker.salary);
}
}