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

Тема в разделе "C/C++/C#", создана пользователем vladis222, 16 янв 2012.

  1. vladis222

    vladis222 Active Member

    Регистрация:
    6 дек 2011
    Сообщения:
    31
    Симпатии:
    0
    Здравствуйте, пОМОГИТЕ ПОЖАЛУЙСТА С ЛАБОЙ, тут нужно уже сдавать их, у меня не полностью работает правильно лабораторная с файлами прямого доступа. Там нужно по таблице ответить на вопросы, на каком виде транспорта в 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);
    }
     
  2. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    я вот не могу найти то место, где программа задает второй вопрос... ты слышал про форматирование кода ? отступы и т.п..?!
    если я тебя спрошу: "где находится код закрытия файла?", то сомневаюсь что ты сможешь быстро найти эту строку...
     
  3. vladis222

    vladis222 Active Member

    Регистрация:
    6 дек 2011
    Сообщения:
    31
    Симпатии:
    0
    printf ("\n\nGruzooborot previsil 5 v 1960g na takix vidax trnsporta:\n");
    while (i<uk) вот эта строка)))
     
  4. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Это ты к чему вообще?
    Это не то место где программа задает второй вопрос, и не то где закрывается файл.
     
Загрузка...
Похожие Темы - Работа Файлами Прямого
  1. gx6060
    Ответов:
    2
    Просмотров:
    413
  2. seoman2
    Ответов:
    21
    Просмотров:
    764
  3. NickProstoNick
    Ответов:
    22
    Просмотров:
    1.520
  4. vladis222
    Ответов:
    3
    Просмотров:
    1.127
  5. Lyuska
    Ответов:
    1
    Просмотров:
    1.170

Поделиться этой страницей