Я взял ввод от пользователя и сохранил в структуре, затем записал их в текстовый файл, используя
fwrite(&a[i],sizeof(a[i]),1,file);
Теперь я хочу удалить указанные c данные индекса структуры, хранящейся в файл. Вот что я пытался сделать.
void deletespecific()
{
int delroll;
printf("ENTER THE ROLL NUMBER TO DELETE: ");
scanf("%d",&delroll);
readdata(); //reads all data stored in the file
file=fopen("Records.txt","w");
for (int w=0;w<t;w++)
{
if(a[w].roll!=delroll)
{
fwrite(&a[w],sizeof(a[w]),1,file);
}
}
fclose(file);
printf(Green"DATA SUCCESSFULLY DELETED!\n"Reset);
}
Сначала я прочитал все данные, хранящиеся в файле, в структуру, а затем записал их в файл, только если бросок не был равен броску, который нужно удалить.
Проблема, с которой я столкнулся, заключается в том, что каждый раз, когда я запускаю функцию "deletespecifi c", она удаляет последние проиндексированные данные.
И это только функция readdata:
void readdata()
{
t=0;
file=fopen("Records.txt","r");
while(fread(&a[i],sizeof(a[i]),1,file)==1)
{
i++;
t++;
}
fclose(file);
}
РЕДАКТИРОВАТЬ: Я не инициализировал как 0 в readdata. Это обновленная функция чтения данных:
void readdata()
{
i=0;
t=0;
file=fopen("Records.txt","r");
while(fread(&a[i],sizeof(a[i]),1,file)==1)
{
i++;
t++;
}
fclose(file);
}
Если вам нужен полный код: полный код