Не уверен, что не так с fseek() в этой функции, поскольку я склонен полагать, что это является причиной проблем с неправильным выводом для моей программы.
index = 0;
present = 0;
while(fread(&beverage, sizeof(struct beverages), 1, filepointer))
{
if(newFile == 0)
break;
printf("%s\n\n", beverage.bcode);
getch();
if(strcmp(_bev_name, beverage.bname) == 0)
{
printf("Inside if statement\n\n");
getch();
beverage.quantity = beverage.quantity + qty;
beverage.qty_last_purchase = qty;
priceOne = spent/qty;//Used to calculate the cost price for one beverage
beverage.price = priceOne + (priceOne*0.10);//Calculation of sale price for beverage
printf("%d\n\n", index);
getch();
fseek(filepointer,index*sizeof(struct beverages),SEEK_SET);
fwrite(&beverage,sizeof(struct beverages),1,filepointer);
present = 1;
break;
}
else
{
present = 0;
index = index + 1;
}
}
if(present == 0)
{
//Stores new beverage name
strcpy(beverage.bname, _bev_name);
//Creation of beverage code using the first two letters of beverage name and random 3 digit number
srand(time(NULL));
int ran_num = rand()%(999 + 1 - 100) + 100;
char str[3];
itoa(ran_num, str,10);
beverage.bcode[0] = beverage.bname[0];
beverage.bcode[1] = beverage.bname[1];
beverage.bcode[2] = str[0];
beverage.bcode[3] = str[1];
beverage.bcode[4] = str[2];
beverage.bcode[5] = '\0';
beverage.qty_last_purchase = qty;
beverage.quantity = qty;
priceOne = spent/qty;//Used to calculate the cost price for one beverage
beverage.price = priceOne + (priceOne*0.10);//Calculation of sale price for beverage
fwrite(&beverage, sizeof(struct beverages), 1, filepointer);
}
Первая часть кода перебирает существующий файл, чтобы найти соответствующий код напитка, а затем обновить количество и цену напитка, но происходит то, что это влияет на другие структуры в файле.
Показывает, как отображаются напитки при их первом добавлении в файл
Показывает, как изменится список напитков после обновления записей
Следует отметить, что я решил обновить первый напиток на первом изображении, но, как вы можете видеть, это влияет на запись второго напитка.
РЕДАКТИРОВАТЬ: определение структуры напитков
struct beverages
{
char bname[NAME_LIMIT];
char bcode[MAX_SIZE];
int quantity;
int qty_last_purchase;
float price;
} beverage;
fseek()
.) Это может привести к большая проблема. Попробуйте вызыватьfseek()
каждый раз, чтобы перейти к определенному индексу записи перед чтением/записью записи. - person Mike Nakis   schedule 31.03.2017