Функция удаление записи из файла

Тема в разделе "ASM, С/С++, Delphi, Java", создана пользователем Commander, 24 мар 2012.

  1. Commander

    Commander Писатель

    Регистр.:
    25 окт 2011
    Сообщения:
    2
    Симпатии:
    0
    Помогите пожалуйста, как организовать удаление записи из файла.

    Код:
    #include<stdio.h>
    #include<conio.h>
    #include<stdlib.h>
     
    void input(void);
    void output(void);
    void deleting(void);
     
    struct s {
    char name[17];//Name of work
    int number;//Number of shop
    int pay;//Wages per month
    }file_d;
     
    FILE *f;
     
    //main
    void main() {
        int n;
     
        clrscr();
        //menu
        puts("Menu");
        puts("1. Record");
        puts("2. Review");
        puts("3. Deleting");
        puts("4. Exit");
     
        scanf("%d",&n);
        fflush(stdin);
        switch(n) {
            case 1:input();break;
            case 2:output();break;
            case 3:deleting();break;
            case 4:break;
     
        }//end menu
    }//end main
     
    //function input
    void input(void) {
        char ch;
        clrscr();
        if((f=fopen("file_d.dat","a+"))==NULL) {
            puts("Failed to open file");
            getch();
        }
        while (ch != 'n') {
            fflush(stdin);
            printf("Enter the name of the work: ");
            gets(file_d.name);
            printf("Enter the number of shop: ");
            scanf("%i",&file_d.number);
            printf("Enter the nonthly salary: ");
            scanf("%i",&file_d.pay);
            fwrite(&file_d,sizeof(file_d),1,f);
            puts("Continue ? y(yes)/n(no)");
            ch=getch();
        }
        clrscr();
        fclose(f);
    }//end function input
     
    //start function output
    void output(void) {
        clrscr();
        if((f=fopen("file_d.dat","r"))==NULL) {
            puts("Failed to open file");
            getch();
        }
        puts("\n|=====================================|");
        puts("|    Name      |  Number    |  Pay    |");
        puts("|=====================================|");
        while(fread(&file_d,sizeof(file_d),1,f)==1) {
            printf("\n| %-12s | %-10d | %-7d |",file_d.name,file_d.number,file_d.pay);
        }
        puts("\n|=====================================|");
        getch();
        fclose(f);
     
    }
    //end function ouput
    
     
  2. radudu99

    radudu99 Писатель

    Регистр.:
    12 окт 2011
    Сообщения:
    8
    Симпатии:
    0
    в конце когда ты дал фрид то тут проверь синтакс потому что он более гибко работает в Бинарном виде
     
  3. tempow

    tempow Создатель

    Регистр.:
    17 сен 2013
    Сообщения:
    18
    Симпатии:
    5
    Что за бред?

    Я бы сделал так. Загнал бы все в массив структур, без i-го элемента, а уже потом этот массив перезаписал в файл.
    Таким образом из файла была бы удалена i-ая запись.
    И кстати, необходимо еще добавить считывание какой элемент необходимо удалить.
     
    Последнее редактирование: 5 янв 2014