Пользователь
Регистрация: 13.09.2009
Сообщений: 10
|
добавить элемент после элемента с указанным номером
Плиз прошу помочь мне найти решение...
Работает все правильно (задание в листинге), но никак не могу сделать так чтоб программа записывала элемент ПОСЛЕ указанного пользователем номером, все стремиться в начало файла >< уже не знаю как решить, пожалуйста хелп)
Код:
/*Структура "Государство":
- название;
- столица;
- численность населения;
- занимаемая площадь.
Удалить все элементы, у которых численность меньше
заданной, добавить элемент после элемента с указанным
номером.*/
#include <math.h>
#include <iostream>
#include <string.h>
using namespace std;
#define max_razmer 255
int o4ki(int min);
int sodershimoe_faila(int n);
int zanesenie_v_fail(int n);
int dobavlenie (int num, int n);
struct gosudarstvo
{
char strana[max_razmer];
char stolica[max_razmer];
int naselenie;
int ploshad;
};
gosudarstvo mas[max_razmer];
int main()
{
FILE *input;
if((input=fopen("1.txt","w"))==NULL)
{
cout<<"\nOshibka pri otkritii faila";
}
int n,i,min, num;
cout<<"\nVvedite koli4estvo stran --> ";
cin>>n;
for(i=0;i<=n-1;i++)
{
cout<<"\nVvedite nazvanie strani ->";
cin>>mas[i].strana;
cout<<"\nVvedite stolicu ->";
cin>>mas[i].stolica;
cout<<"\nVvedite kolichestvo naselenia ->";
cin>>mas[i].naselenie;
cout<<"\nVvedite ploshad ->";
cin>>mas[i].ploshad;
cout<<"\n_______________________________________\n";
fprintf(input,"%s\n",mas[i].strana);
fprintf(input,"%s\n",mas[i].stolica);
fprintf(input,"%i\n",mas[i].naselenie);
fprintf(input,"%i\n",mas[i].ploshad);
fprintf(input,"%s\n","\n_______________________________________\n");
}
sodershimoe_faila(n);
cout<<"\nVvedite minimalbnoe naselenie --> ";
cin>>min;
fclose(input);
o4ki(min);
cout<<"\n Vvedite nomer elementa: ";
cin>>num;
dobavlenie (num, n);
zanesenie_v_fail(num);
return 0;
}
int o4ki(int min)
{
FILE *read;
FILE *input;
char stran[max_razmer],gorod[max_razmer],otdelenie[max_razmer];
int nasel,plosh;
if((read=fopen("1.txt","r"))==NULL)
{
cout<<"\nOshibka pri otkritii faila";
}
if((input=fopen("buffer.txt","w"))==NULL)
{
cout<<"\nOshibka pri otkritii faila";
}
do
{
fscanf(read,"%s\n%s\n%i\n%i\n%s\n",&stran,&gorod,&nasel,&plosh,&otdelenie);
if(min<nasel)
{
fprintf(input,"%s\n%s\n%i\n%i\n%s\n",stran,gorod,nasel,plosh,otdelenie);
}
}
while(!feof(read));
fclose(read);
fclose(input);
return 1;
}
int sodershimoe_faila(int n)
{
for(int i=0;i<=n-1;i++)
{
cout<<endl;
cout<<mas[i].strana<<endl;
cout<<mas[i].stolica<<endl;
cout<<mas[i].naselenie<<endl;
cout<<mas[i].ploshad<<endl;
}
return 1;
}
int zanesenie_v_fail(int num)
{
FILE *read;
FILE *input;
char stran[max_razmer],gorod[max_razmer],otdelenie[max_razmer];
int nasel,plosh;
if((read=fopen("buffer.txt","r"))==NULL)
{
cout<<"\nOshibka pri otkritii faila";
}
if((input=fopen("1.txt","w"))==NULL)
{
cout<<"\nOshibka pri otkritii faila";
}
do
{
fscanf(read,"%s\n%s\n%i\n%i\n%s\n",&stran,&gorod,&nasel,&plosh,&otdelenie);
fprintf(input,"%s\n%s\n%i\n%i\n%s\n",stran,gorod,nasel,plosh,otdelenie);
}
while(!feof(read));
fclose(read);
fclose(input);
return 1;
}
int dobavlenie (int num, int n)
{
FILE *input;
if((input=fopen("1.txt","r+ c"))==NULL)
{
cout<<"\nOshibka pri otkritii faila";
}
for (int i=n-1; i>num; i--)
{
mas[i+1]=mas[i];
}
n++;
cout<<"\n Vvedite stranu: "<<endl;
cout<<"\nVvedite nazvanie strani ->";
cin>>mas[num+1].strana;
cout<<"\nVvedite stolicu ->";
cin>>mas[num+1].stolica;
cout<<"\nVvedite kolichestvo naselenia ->";
cin>>mas[num+1].naselenie;
cout<<"\nVvedite ploshad ->";
cin>>mas[num+1].ploshad;
cout<<"\n_______________________________________\n";
fprintf(input,"%s\n",mas[num+1].strana);
fprintf(input,"%s\n",mas[num+1].stolica);
fprintf(input,"%i\n",mas[num+1].naselenie);
fprintf(input,"%i\n",mas[num+1].ploshad);
fprintf(input,"%s\n","\n_______________________________________\n");
return 1;
}
|