Удалить данные структуры из текстового файла в C - PullRequest
0 голосов
/ 03 марта 2020

Я взял ввод от пользователя и сохранил в структуре, затем записал их в текстовый файл, используя

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);
}

Если вам нужен полный код: полный код

1 Ответ

0 голосов
/ 03 марта 2020

переменная t, глобальная переменная, представляет собой смещение (начинается с 0) в массив a[].

Поэтому его содержимое на 1 меньше, чем количество записей в массиве a[], а не количество записей в массиве a[].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...