Удаление строк в структуре - 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);
}