Я получил данные от пользователя и сохранил их в структуре, а затем записал их в текстовый файл, используя
fwrite(&a[i],sizeof(a[i]),1,file);
Теперь я хочу удалить определенные индексные данные структуры, хранящиеся в файле. Вот что я пытался сделать.
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);
}
Я сначала прочитал все данные, хранящиеся в файле, в структуру, а затем записал их в файл только в том случае, если рулон не был равен удаляемому рулону.
Проблема заключается в том, что каждый раз, когда я запускаю функцию "deletespecific", она удаляет последние проиндексированные данные.
И это всего лишь функция чтения данных:
void readdata()
{
t=0;
file=fopen("Records.txt","r");
while(fread(&a[i],sizeof(a[i]),1,file)==1)
{
i++;
t++;
}
fclose(file);
}
EDIT: я не инициализировал i как 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);
}
Если вам нужен полный код: полный код
readdata()
два счетчикаi
иt
? Почему они глобальны? Почему вы не инициализируетеi
? - person Johnny Mopp   schedule 03.03.2020"rb"
и"wb"
в вызовеfopen
. - person user3386109   schedule 03.03.2020t
глобальной переменной? - person 4386427   schedule 03.03.2020a[]
, чтобы он был достаточно большим, чтобы вместить весь файл? - person user3629249   schedule 03.03.2020i
? Глобальная переменная, которая не обнуляется при запуске нового чтения? - person 4386427   schedule 03.03.2020readdata()
i
ни к чему не относится. Предлагаю заменить все ссылки наi
наt
- person user3629249   schedule 03.03.2020