Удалите из файла сведения о багаже, общий вес вещей в котором меньше, чем 10 кг

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
manichka2009
Сообщения: 2
Зарегистрирован: 30 мар 2014, 20:50

Запись имеет вид: фамилия, количество вещей, общий вес. Удалите из файла сведения о багаже, общий вес вещей в котором меньше, чем 10 кг.
Основные данные ввел, а как удалить сведения о багаже?

Код: Выделить всё

#include <stdio.h>
#include <conio.h>
#include <string.h>
 
struct tov {char name[10]; float c; int kol;} t1;
void input(FILE *); // создание нового файла
void print(FILE *); // просмотр файла
void app(FILE *); // добавление в файл
void find(FILE *); // поиск и изменение
 
main()
{ char c;
  FILE *tf;
  while (1)
  {
    puts("  1 – Novii fail");
    puts("  2 – prosmotr faila");
    puts("  3 – dobavlenie v fail");
    puts("  4 – poisk i izmenenie");
    puts("  0 - vihod");
    c=getch();
 
    switch(c)
 
    { case '1':input(tf);break;
      case '2' :p rint(tf);break;
      case '3':app(tf);break;
      case '4':find(tf);break;
      case '0':return 0;
      default : puts(" неверный режим");
}
  }
}
 
void input(FILE *tf)
 
{
    char ch;
  tf=fopen("file1.dat","wb"); // открытие бинарного файла для записи
  printf("\n Vvod sportsmena\n");
 
  do
 
  { printf("\n Familiya: "); scanf("%s",t1.name);
    printf(" Kolichestvo vechei: "); scanf("%f",&t1.c);
    printf(" Obchi ves: "); scanf("%d",&t1.kol);
    fwrite(&t1,sizeof(t1),1,tf); // запись в файл одной структуры t1
    printf("\n zakonchit?  y/n  ");
    ch=getch();
 
  }
 
  while (ch != 'y');
 
  fclose(tf);
}
void print(FILE *tf)
{ int i;
  tf=fopen("file1.dat","rb"); // открытие бинарного файла для чтения
  i=1;
  fread(&t1,sizeof(t1),1,tf); // чтение из файла одной структуры t1
  while (!feof(tf))
 
  { printf("\n  %3d familiya %10s nomer %6.2f ochki %4d",i,t1.name,t1.c,t1.kol);
    fread(&t1,sizeof(t1),1,tf);
    i++;
  }
  getch();
}
void app(FILE *tf)
{ char ch;
 
  tf=fopen("file1.dat","ab"); // открытие бинарного файла для добавления
  printf("\n  Vvod sportsmena \n");
  do
  {  printf("\n familiya: "); scanf("%s",t1.name);
    printf(" Kolichestvo vechei: "); scanf("%f",&t1.c);
    printf(" Obchi ves: "); scanf("%d",&t1.kol);
    fwrite(&t1,sizeof(t1),1,tf);
    printf(" zakonchit?  y/n ");
    ch=getch();
  }
  while (ch != 'y');
  fclose(tf);
}
void find(FILE *tf)
{ char c,tov[10];
  long int i;
  tf=fopen("file1.dat","rb+"); // открытие бинарного файла для чтения и записи
  puts(" familiya: ");
  gets(tov);
  fread(&t1,sizeof(t1),1,tf);
 
while (!feof(tf))
  {  if (strcmp(t1.name,tov)==0)
     {   printf(" familiya %10s Kolichestvo vechei %6.2f Obchi ves %d",t1.name,t1.c,t1.kol);
         printf("\n izmenit? y/n ");
         c=getch();
         if (c=='y')
         {  printf("\n Kolichestvo vechei: ");scanf("%d",&t1.kol);
            printf("\n Obchi ves: ");scanf("%f",&t1.c);
            i=sizeof(t1);
            fseek(tf,-i,1); // возврат на sizeof(t1) байт назад
            fwrite(&t1,sizeof(t1),1,tf); // запись изменённой структуры на прежнее место
         }
      }
      fseek(tf,0,1);
 
     fread(&t1,sizeof(t1),1,tf);
  }
  fclose(tf);
}
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

1. Отрыть файл на чтение
2. Вычитать данные из файла в массив.
3. Закрыть файл.
4. Открыть тот же файл на запись (без append mode, чтобы добиться очистки его контента).
5. Записать в цикле данные в файл, проверяя, что вес больше либо равен 10 кг.
6. Закрыть файл.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Ответить