Я подозреваю, что моя программа не работает должным образом. Выход не то, что я ожидал. Когда я запускаю эту программу в первый раз, результат отличается от того, если мы повторим действие, не закрывая программу, например добавим новую запись.
Вот исходный код, который у меня есть на данный момент:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
struct emp{
char name[40];
int age;
float bs;
};
main()
{
FILE *fp, *ft;
struct emp e;
char choice;
char another;
char empname[40];
fp = fopen("emp.dat","rb+");
if(fp == NULL)
{
fp = fopen("emp.dat", "wb+");
if(fp == NULL)
{
printf("File cannot be opened\n");
system("pause");
exit(0);
}
}
while(1)
{
system("cls");
printf("1. Add New Record\n");
printf("2. Modify to Record\n");
printf("3. Delete to Record\n");
printf("4. Display Records\n");
printf("0. Exit\n");
printf("Enter your choice: \n");
fflush(stdin);
choice = getche();
printf("\n");
switch(choice)
{
case '1':
another = 'Y';
fseek(fp,0,SEEK_END);
while(another == 'Y')
{
printf("Enter name, age and basic salary: \n");
scanf("%s%d%f", e.name, &e.age, &e.bs);
fwrite(&e,sizeof(e),1,fp);
printf("Add more records (Y/N)\n");
fflush(stdin);
scanf("%c", &another);
}
break;
case '2':
printf("Enter name of employee to modify record!\n");
scanf("%s", empname);
rewind(fp);
while(fread(&e,sizeof(e),1,fp) == 1)
{
while(strcmp(e.name,empname) == 0)
{
fseek(fp,-1,SEEK_CUR);
printf("Enter new name, age, basic salary!\n");
scanf("%s %d %f", e.name, &e.age, &e.bs);
fwrite(&e,sizeof(e),1,fp);
}
}
break;
case '3':
another = 'Y';
while(another == 'Y')
{
rewind(fp);
ft = fopen("temp.dat", "wb+");
printf("Enter name of employee to delete record!\n");
scanf("%s", &empname);
while(fread(&e,sizeof(e),1,fp) == 1)
{
while(strcmp(e.name,empname) != 0)
{
fseek(fp,-1,SEEK_CUR);
fwrite(&e,sizeof(e),1,ft);
}
fclose(fp);
fclose(ft);
remove("emp.dat");
rename("temp.dat","emp.dat");
fp = fopen("emp.dat","wb+");
}
printf("Do you want to delete more record/s (Y/N)!\n");
fflush(stdin);
another = getche();
}
break;
case '4':
rewind(fp);
while(fread(&e, sizeof(e), 1, fp) == 1)
printf("%s %d %0.2f\n", e.name, e.age, e.bs);
break;
case '0':
exit(0);
break;
default:
printf("Enter correct choice!\n");
break;
}
fclose(fp);
system("pause");
}
}
Вот моя программа работает и с примером вывода: