Удаление строк в структуре - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Всем привет. В программирование очень слаб, но стараюсь сам вникать в суть. Не могу никак сделать программу которая считывает структуру из файла с заказами, а потом удаляет заказы стоимость которых превышает заданную и сохранить новый список в новый файл. В моём коде не нужные строки в программе не видно но количество их пишет прежнее , а в новом файле остаются не тронутыми все строки.
#include<stdio.h>  
#include<string.h>  
#include <stdio.h>     
#include <conio.h>   
#include <windows.h>
#include <ctype.h>
#include <stdlib.h>
#include <iostream>
//Начало программы
main()
{
     //Установка русского языка 
    setlocale (LC_ALL, "Russian");
    /***********************/
    int i,n,kol,j,S,n_u;
    char s[100],fn[10];
    char company[20];
    FILE *f,*f1;
    struct reclame
    {
        char company[20];
        char profile[20];
        char requisites[20];
        char telephone[20];
        char name[20];
        int coast;
        char date[20];
    };
        reclame z[20];
  
    puts("Введите имя файла");
    gets(fn);
    if((f=fopen(fn,"r"))==NULL)
    puts("Неправильно задано имя файла \n");
    else
    {
        printf("\nФайл %s открыт \n", fn);
            puts("\nИсходный файл");
        puts("______________________________________________________________________________________________________________________");
        puts("|    Фирма    |    Деятельность    |     Заказчик    |     Телефон    |   Имя заказа      |  Стоймость   |    Дата   |");
        puts("----------------------------------------------------------------------------------------------------------------------");
        i=0;
        while(!feof(f))
        {
            fscanf(f,"%s%s%s%s%s%d%s",&z[i].company,&z[i].profile,&z[i].requisites,&z[i].telephone,&z[i].name,&z[i].coast,&z[i].date);
            printf("|%-13s|%-20s|%-17s|%-16s|%-19s|%-14d|%-11s|\n",z[i].company,z[i].profile,z[i].requisites,z[i].telephone,z[i].name,z[i].coast,z[i].date);
            puts("----------------------------------------------------------------------------------------------------------------------");           
            i++;
        }
        n=i;
        printf("В файле %d записей \n", n);
        fclose(f);
        }
        /* ******************************************/ 
         puts("\nВведите стоймость\n");
        scanf("%d",&S);

        fflush(stdin); 
        puts("\nВведите имя нового файла");
        gets(fn);
        f1=fopen(fn,"w");
        printf("\nПолучившийся файл\n");
        puts("______________________________________________________________________________________________________________________");
        puts("|    Фирма    |    Деятельность    |     Заказчик    |     Телефон    |   Имя заказа      |  Стоймость   |    Дата   |");
        puts("----------------------------------------------------------------------------------------------------------------------");
        i=0;
        for (i=0;i<n;i++)
    
        if(S>z[i].coast)
        
        { 
        printf("|%-13s|%-20s|%-17s|%-16s|%-19s|%-14d|%-11s|\n",z[i].company,z[i].profile,z[i].requisites,z[i].telephone,z[i].name,z[i].coast,z[i].date);
        puts("----------------------------------------------------------------------------------------------------------------------");
        fprintf(f1,"|%-13s|%-20s|%-17s|%-16s|%-19s|%-14d|%-11s|\n",z[i].company,z[i].profile,z[i].requisites,z[i].telephone,z[i].name,z[i].coast,z[i].date); 
        }
    
      printf("В файле  %d записей \n", n);

        fclose(f1);   // close the files

    printf("Press any key...");
    getchar();
    return(0);
}
Файл со структурой.
ByFly        Интернет            Иванов           +375-555-55-55  Деморолик          1200000       25.04.2016 
5Элемент     Торговля            Петров           +375-444-44-44  Презентация        500000        12.05.2016 
Velcome      Связь               Васильев         +375-666-66-66  Ролик              1400000       20.06.2016 
Белшина      Производство        Макаров          +375-777-77-77  Слогон             200000        05.07.2016 
Корона       Торговля            Котова           +375-888-88-88  Билборд            2000000       20.08.2016
BestClub     Развлечения         Кент             +375-999-99-99  Афиша              150000        21.08.2016
WarGaming    Игры                Титов            +375-111-11-11  Ролик              1300000       19.09.2016

Решение задачи: «Удаление строк в структуре»

textual
Листинг программы
#include <stdio.h>
#include <locale.h>
//Начало программы
main()
{
 
    setlocale (LC_ALL, "Russian");//Установка русского языка
 
    int i=0,n=0,kol=0,j=0,S=0,n_u=0;
    char s[100],fn[10];
    char company[20];
    FILE *f,*f1;
    struct reclame
    {
        char company[20];
        char profile[20];
        char requisites[20];
        char telephone[20];
        char name[20];
        int coast;
        char date[20];
    };
        struct reclame z[20];
 
    printf("Введите имя файла: ");
    gets(fn);
    if((f=fopen(fn,"r"))==NULL)
    puts("Неправильно задано имя файла");
    else
    {
        printf("\nФайл %s открыт \n", fn);
            puts("\nИсходный файл");
        puts("<br>");
        puts("|    Фирма    |    Деятельность    |     Заказчик    |     Телефон    |   Имя заказа      |  Стоймость   |    Дата   |");
        puts("----------------------------------------------------------------------------------------------------------------------");
        i=0;
        while(!feof(f))
        {
            fscanf(f,"%s%s%s%s%s%d%s",&z[i].company,&z[i].profile,&z[i].requisites,&z[i].telephone,&z[i].name,&z[i].coast,&z[i].date);
            printf("|%-13s|%-20s|%-17s|%-16s|%-19s|%-14d|%-11s|\n",z[i].company,z[i].profile,z[i].requisites,z[i].telephone,z[i].name,z[i].coast,z[i].date);
            puts("----------------------------------------------------------------------------------------------------------------------");
            i++;
        }
        n=i;
        printf("В файле %d записей \n", n);
        fclose(f);
        }
        /* ******************************************/
        printf("\nВведите стоймость: ");
        scanf("%d",&S);
        fflush(stdin);
        printf("Введите имя нового файла: ");
        gets(fn);
        f1=fopen(fn,"w");
        printf("\nПолучившийся файл:\n");
        puts("<br>");
        puts("|    Фирма    |    Деятельность    |     Заказчик    |     Телефон    |   Имя заказа      |  Стоймость   |    Дата   |");
        puts("----------------------------------------------------------------------------------------------------------------------");
        i=0;
        for (i=0;i<n;i++)
        if(S>z[i].coast)
        {
        printf("|%-13s|%-20s|%-17s|%-16s|%-19s|%-14d|%-11s|\n",z[i].company,z[i].profile,z[i].requisites,z[i].telephone,z[i].name,z[i].coast,z[i].date);
        puts("----------------------------------------------------------------------------------------------------------------------");
        n_u++;
        fprintf(f1,"|%-13s|%-20s|%-17s|%-16s|%-19s|%-14d|%-11s|\n",z[i].company,z[i].profile,z[i].requisites,z[i].telephone,z[i].name,z[i].coast,z[i].date);
        }
 
      printf("\nКоличество записей в новом файле: %d \n", n_u);
 
        fclose(f1);   // close f1
 
    printf("Press any key...");
    getchar();
    return(0);
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.8 из 5
Похожие ответы