Удаление строк в структуре - 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); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д