Министерство образования и науки РФ
ГОУВПО «Комсомольский-на-Амуре государственный технический университет»
Кафедра МОП ЭВМ
«Организация работы с файлами»
Выполнил: Рогозин В.А.
Группа: 4ВС-1
Проверил: Могильников Е.В.
Комсомольск-на-Амуре
2006
Задание: В командной строке задается имя входного файла и целое число N. Распечатать последние N строк указанного файла.
Алгоритм:
С командной строки указывается имя файла и число строй с конца которые нужно вывести на экран, если файл не найден выдаётся предупреждение, иначе идёт цикл с посимвольным считыванием файла с занесением его в структуру, если число элементов структуры превышает размер заданного количества строк, то первый элемент удаляется из структуры, цикл продолжается до конца файла
Блок-схема:
Листинг:
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
FILE *in;
struct sm
{
char zn[300];
sm *next;
}*perv,*tec,*posl,*temp;
void readfile(int N,char *str)
{
char c;
if(fopen(str,"r")==NULL)
{
cout<<"Неверно указан путь к файлу";
getch();
exit(1);
}
in=fopen(str,"r");
clrscr();
int i=0, k=0,v,d;
do
{
tec=(sm*)calloc(1,sizeof(sm));
v=0, d=0;
while(v==0)
{
fscanf(in,"%c",&c);
if(c=='\n') v=1;
(*tec).zn[d]=c; //посимвольная запись строки в массив
d++;
}
if(i==0)
{ perv=tec;
posl=perv;
i++; }
else
{
temp=tec;
tec=posl;
posl=temp;
tec->next=posl;
i++;
}
posl->next=NULL;
k++;
if(k==(N+2))
{
perv=perv->next;
k--;
}
}while(feof(in)==0);
temp=perv;
while(temp->next!=NULL) //вывод на экран
{
cout<<(*temp).zn;
temp=temp->next;
}
cout<<(*temp).zn;
fclose(in);
}
void main()
{
clrscr();
char *ptr;
int N;
cout<<"Введите путь к файлу: ";
cin>>ptr;
cout<<"Введите кол-во строк: ";
cin>>N;
perv=(sm*)calloc(1,sizeof(sm));
posl=(sm*)calloc(1,sizeof(sm));
temp=(sm*)calloc(1,sizeof(sm));
posl=perv;
perv->next=NULL;
posl->next=NULL;
readfile(N,ptr);
getch();
}
Литература:
Не использовалась
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.