Работа С Файлами Прямого Доступа

vladis222

Active Member
06.12.2011
31
0
#1
Здравствуйте, пОМОГИТЕ ПОЖАЛУЙСТА С ЛАБОЙ, тут нужно уже сдавать их, у меня не полностью работает правильно лабораторная с файлами прямого доступа. Там нужно по таблице ответить на вопросы, на каком виде транспорта в 1975 году грузооборот был максимальным, на каких видах транспорта в 1960 г грузооборот превысил 5 процентов, найти и упорядочить в порядке обратном алфавитному названия видов транспорта, на которых в 1970 году пассажирооборот не превысил 40 %. Я написал полностью код, но отвечая на 2 вопрос задания, возникает ошибка и прога вылетает. Подскажите, пожалуйста, что это может быть.
Вот код

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#define M 100
void File_input();
void File_output();
void Max();
void prev();
void sort();
void n_prev();
struct RECORD
{
char name[20];
float gruz_60;
float gruz_70;
float gruz_75;
float pas_60;
float pas_70;
float pas_75;
}a;
FILE *fv;
int N=0;
int main()
{
File_input();
File_output();
Max();
prev();
sort();
n_prev();
}
void File_input()
{
if ((fv=fopen("res.txt","wb"))==NULL)
{
printf ("ERROR\n");
exit(-1);
}
char gruz_60[10],gruz_70[10],gruz_75[10],pas_60[10],pas_70[10],pas_75[10];
strcpy(a.name,"a");
while (strcmp(a.name,"")!=0)
{
printf ("Vid trnsporta:");
gets (a.name);
if (strcmp(a.name,"")!=0)
{
N++;
fwrite (a.name,sizeof(a.name),1,fv);
printf ("Gruzooborot v 1960g:");
gets (gruz_60);
fwrite (gruz_60,sizeof(a.gruz_60),1,fv);
printf ("Gruzooborot v 1970g:");
gets (gruz_70);
fwrite (gruz_70,sizeof(a.gruz_70),1,fv);
printf ("Gruzooborot v 1975g:");
gets (gruz_75);
fwrite (gruz_75,sizeof(a.gruz_75),1,fv);
printf ("Passajirooborot v 1960g:");
gets (pas_60);
fwrite (pas_60,sizeof(a.pas_60),1,fv);
printf ("Passajirooborot v 1970g:");
gets (pas_70);
fwrite (pas_70,sizeof(a.pas_70),1,fv);
printf ("Passajirooborot v 1975g:");
gets(pas_75);
fwrite (pas_75,sizeof(a.pas_75),1,fv);
}
}
printf ("Vse dannie zapisani v fail res.dat\n");
getch();
fclose (fv);
}
void File_output()
{
if ((fv=fopen("res.txt","r"))==NULL)
{
printf ("ERROR\n");
exit(-1);
}
char gruz_60[10],gruz_70[10],gruz_75[10],pas_60[10],pas_70[10],pas_75[10];
void shapka();
shapka();
int i=0,uk;
fseek(fv,0,SEEK_END);
uk=ftell(fv);
while (i<uk)
{
fseek(fv,i,SEEK_SET);
fread (a.name,sizeof(a.name),1,fv);
fread (gruz_60,sizeof(a.gruz_60),1,fv);
fread (gruz_70,sizeof(a.gruz_70),1,fv);
fread (gruz_75,sizeof(a.gruz_75),1,fv);
fread (pas_60,sizeof(a.pas_60),1,fv);
fread (pas_70,sizeof(a.pas_70),1,fv);
fread (pas_75,sizeof(a.pas_75),1,fv);
i+=sizeof(a);
printf ("\n%s|%s|%s|%s|%s|%s|%s|",a.name,gruz_60,gruz_70,gruz_75,pas_60,pas_70,pas_75);
printf ("\n----------------------------------------------|");
}
getch();
fclose(fv);
}
void shapka()
{
printf ("\n----------------------------------------------|");
printf ("\n|Vid transporta| Gruzooborot |Passajirooborot|");
printf ("\n| |1960|1970|1975|1960|1970|1975 |");
printf ("\n----------------------------------------------|");
}
void Max()
{
if ((fv=fopen("res.txt","r"))==NULL)
{
printf ("ERROR\n");
exit(-1);
}
char gruz_60[10],gruz_70[10],gruz_75[10],pas_60[10],pas_70[10],pas_75[10],maxn[20],ma
x[10];
int i=0,uk,m=0;
fseek(fv,0,SEEK_END);
uk=ftell(fv);
while (i<uk)
{
fseek(fv,i,SEEK_SET);
fread (a.name,sizeof(a.name),1,fv);
fread (gruz_60,sizeof(a.gruz_60),1,fv);
fread (gruz_70,sizeof(a.gruz_70),1,fv);
fread (gruz_75,sizeof(a.gruz_75),1,fv);
fread (pas_60,sizeof(a.pas_60),1,fv);
fread (pas_70,sizeof(a.pas_70),1,fv);
fread (pas_75,sizeof(a.pas_75),1,fv);
a.gruz_75=atof(gruz_75);
if (a.gruz_75>m)
{
m=a.gruz_75;
strcpy(max,gruz_75);
strcpy(maxn,a.name);
}
i+=sizeof(a);
}
printf ("\n\nGruzooborot bil maximalnim v 1975g na takom vide transporta:\n%s %s",maxn,max);
getch();
fclose(fv);
}
void prev()
{
if ((fv=fopen("res.txt","r"))==NULL)
{
printf ("\nERROR");
exit(-1);
}
char gruz_60[10],gruz_70[10],gruz_75[10],pas_60[10],pas_70[10],pas_75[10];
int i=0,uk,m=0;
fseek(fv,0,SEEK_END);
uk=ftell(fv);
printf ("\n\nGruzooborot previsil 5 v 1960g na takix vidax trnsporta:\n");
while (i<uk)
{
fseek(fv,i,SEEK_SET);
fread (a.name,sizeof(a.name),1,fv);
fread (gruz_60,sizeof(a.gruz_60),1,fv);
fread (gruz_70,sizeof(a.gruz_70),1,fv);
fread (gruz_75,sizeof(a.gruz_75),1,fv);
fread (pas_60,sizeof(a.pas_60),1,fv);
fread (pas_70,sizeof(a.pas_70),1,fv);
fread (pas_75,sizeof(a.pas_75),1,fv);
a.gruz_60=atof(gruz_60);
if (a.gruz_60>5)
printf ("\n%s %s",a.name,gruz_60);
i+=sizeof(a);
}
getch();
fclose(fv);
}
void n_prev()
{
if ((fv=fopen("res.txt","r"))==NULL)
{
printf ("ERROR\n");
exit(-1);
}
char gruz_60[10],gruz_70[10],gruz_75[10],pas_60[10],pas_70[10],pas_75[10];
int i=0,uk,m=0;
fseek(fv,0,SEEK_END);
uk=ftell(fv);
printf ("\n\nNazvania vidov transporta na kotorix v 1970g\npassajirooborot ne previwal 40:\n");
while (i<uk)
{
fseek(fv,i,SEEK_SET);
fread (a.name,sizeof(a.name),1,fv);
fread (gruz_60,sizeof(a.gruz_60),1,fv);
fread (gruz_70,sizeof(a.gruz_70),1,fv);
fread (gruz_75,sizeof(a.gruz_75),1,fv);
fread (pas_60,sizeof(a.pas_60),1,fv);
fread (pas_70,sizeof(a.pas_70),1,fv);
fread (pas_75,sizeof(a.pas_75),1,fv);
a.pas_70=atof(pas_70);
if (a.pas_70<40&&a.pas_70!=0)
printf ("\n%s %s",a.name,pas_70);
i+=sizeof(a);
}
getch();
fclose(fv);
}
void sort()
{
if ((fv=fopen("res.txt","r+w"))==NULL)
{
printf ("ERROR\n");
getch();
exit(-1);
}
int uk,i=0,j,pos;
struct RECORD b;
char gruz_60[10],gruz_70[10],gruz_75[10],pas_60[10],pas_70[10],pas_75[10];
char gruz_60b[10],gruz_70b[10],gruz_75b[10],pas_60b[10],pas_70b[10],pas_75b[10];
fseek(fv,0,SEEK_END);
uk=ftell(fv);
while (i<((sizeof(a))*(N-1)))
{
fseek(fv,i,SEEK_SET);
fread (a.name,sizeof(a.name),1,fv);
fread (gruz_60,sizeof(a.gruz_60),1,fv);
fread (gruz_70,sizeof(a.gruz_70),1,fv);
fread (gruz_75,sizeof(a.gruz_75),1,fv);
fread (pas_60,sizeof(a.pas_60),1,fv);
fread (pas_70,sizeof(a.pas_70),1,fv);
fread (pas_75,sizeof(a.pas_75),1,fv);
j=i+sizeof(a);
while (j<((sizeof(a))*N))
{
fseek(fv,j,SEEK_SET);
fread (b.name,sizeof(b.name),1,fv);
fread (gruz_60b,sizeof(b.gruz_60),1,fv);
fread (gruz_70b,sizeof(b.gruz_70),1,fv);
fread (gruz_75b,sizeof(b.gruz_75),1,fv);
fread (pas_60b,sizeof(b.pas_60),1,fv);
fread (pas_70b,sizeof(b.pas_70),1,fv);
fread (pas_75b,sizeof(b.pas_75),1,fv);
if (strcmp(a.name,b.name)<0)
{
pos=i;
fseek(fv,pos,SEEK_SET);
fwrite (b.name,sizeof(b.name),1,fv);
fwrite (gruz_60b,sizeof(b.gruz_60),1,fv);
fwrite (gruz_70b,sizeof(b.gruz_70),1,fv);
fwrite (gruz_75b,sizeof(b.gruz_75),1,fv);
fwrite (pas_60b,sizeof(b.pas_60),1,fv);
fwrite (pas_70b,sizeof(b.pas_70),1,fv);
fwrite (pas_75b,sizeof(b.pas_75),1,fv);
pos=j;
fseek(fv,pos,SEEK_SET);
fwrite (a.name,sizeof(a.name),1,fv);
fwrite (gruz_60,sizeof(a.gruz_60),1,fv);
fwrite (gruz_70,sizeof(a.gruz_70),1,fv);
fwrite (gruz_75,sizeof(a.gruz_75),1,fv);
fwrite (pas_60,sizeof(a.pas_60),1,fv);
fwrite (pas_70,sizeof(a.pas_70),1,fv);
fwrite (pas_75,sizeof(a.pas_75),1,fv);
strcpy(a.name,b.name);
strcpy(gruz_60,gruz_60b);
strcpy(gruz_70,gruz_70b);
strcpy(gruz_75,gruz_75b);
strcpy(pas_60,pas_60b);
strcpy(pas_70,pas_70b);
strcpy(pas_75,pas_75b);
}
j+=sizeof(a);
}
i+=sizeof(a);
}
fclose (fv);
}
 

lazybiz

Well-Known Member
03.11.2010
1 339
0
#2
я вот не могу найти то место, где программа задает второй вопрос... ты слышал про форматирование кода ? отступы и т.п..?!
если я тебя спрошу: "где находится код закрытия файла?", то сомневаюсь что ты сможешь быстро найти эту строку...
 

vladis222

Active Member
06.12.2011
31
0
#3
я вот не могу найти то место, где программа задает второй вопрос... ты слышал про форматирование кода ? отступы и т.п..?!
если я тебя спрошу: "где находится код закрытия файла?", то сомневаюсь что ты сможешь быстро найти эту строку...
printf ("\n\nGruzooborot previsil 5 v 1960g na takix vidax trnsporta:\n");
while (i<uk) вот эта строка)))
 

lazybiz

Well-Known Member
03.11.2010
1 339
0
#4
Это ты к чему вообще?
Это не то место где программа задает второй вопрос, и не то где закрывается файл.