Считать из файла структуру - Название книги, автор, категория - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток! Мое задание заключается в написании программы, которая считывает из файла структуру (Название книги, автор, категория, к-во страниц, оценка, цена) либо позволяет ввести ее самой и сортирует ее по выбранному параметру. Все прекрасно работает, когда я ввожу структуру сама. А считать из файла у меня не удается. Не могу понять как работает.( Объясните, пожалуйста, что не так? И при возможности посоветуйте как бы отдельно доступиться например к какому-то одному желаемому элементу, чтобы его изменить, если он уже считан или задан? вот мой код:
#include<stdio.h>
#include<string.h>
#include<conio.h>
#define N 3

struct BOOKS
{
 char NAME[30];
 char AUTHOR[30];
 char CATEGORY[30];
 int STR;
 int BALL;
 int PRICE;
 }
 BOOK[N];
 
void vvid()
{
 int a,i,X;
 printf("S faila - 1; Vvestu samomy - 2\n");
 scanf("%d", &a);
 if (a==1)
 {
    FILE *fp;
    fp = fopen("books.txt", "rb");
    X = fread(&BOOK[0], sizeof(BOOK[N]), N, fp);
    fclose(fp); }
 else
 {
   for (i=0; i<N; i++)
   {
    printf("Vvedite dannue %d knuhu\n", i+1);
    printf("Nazva: ");
    scanf("%s", BOOK[i].NAME);
 
    printf("Avtor: ");
    scanf("%s", BOOK[i].AUTHOR);
 
    printf("Katehoria: ");
    scanf("%s", BOOK[i].CATEGORY);
 
    printf("Stranic: \n");
    scanf("%d", &BOOK[i].STR);
 
    printf("Ocenka: \n");
    scanf("%d", &BOOK[i].BALL);
 
    printf("Cena: \n");
    scanf("%d", &BOOK[i].PRICE);
    }}}
 
void printrezult()
{
 int z,m;
  for(z=0;z<N;z++)
  {
   printf("%20s %-10s %-10s %-5d %-5d %-5d\n",BOOK[z].NAME,BOOK[z].AUTHOR,BOOK[z].CATEGORY,BOOK[z].STR,BOOK[z].BALL,BOOK[z].PRICE);
  }
}
 
void sort()
{
 int j,k,x,y,v,w,s,z,d,g,h,u,b;
 printf("sort author - 1; sort title - 2; sort category - 3;\n");
 printf("sort pages - 4; sort mark - 5; sort price - 6.\n");
 scanf("%d",&b);
 BOOKS p;
 
    if (b==1) {
        for(j=0; j<N; j++)
        {
          for(k=0; k<N; k++)
          {
            if(strcmp(BOOK[j].NAME,BOOK[k].NAME)<0)
            {
              p=BOOK[j];
              BOOK[j]=BOOK[k];
              BOOK[k]=p; }
              }}}
    if (b==2) {
        for(x=0; x<N; x++)
        {
          for(y=0; y<N; y++)
          {
            if(strcmp(BOOK[x].AUTHOR,BOOK[y].AUTHOR)<0)
            {
              p=BOOK[x];
              BOOK[x]=BOOK[y];
              BOOK[y]=p; }
              }}}
    if (b==3) {
        for(v=0; v<N; v++)
        {
          for(w=0; w<N; w++)
          {
            if(strcmp(BOOK[v].CATEGORY,BOOK[w].CATEGORY)<0)
            {
               p=BOOK[v];
               BOOK[v]=BOOK[w];
               BOOK[w]=p; }
               }}}
     if (b==4) {
        for(s=0; s<N; s++)
        {
          for(z=0; z<N; z++)
          {
          if (BOOK[s].STR<BOOK[z].STR)
            {
               p=BOOK[s];
               BOOK[s]=BOOK[z];
               BOOK[z]=p; }
               }}}
     if (b==5) {
        for(d=0; d<N; d++)
        {
          for(g=0; g<N; g++)
          {
            if (BOOK[d].BALL<BOOK[g].BALL)
            {
               p=BOOK[d];
               BOOK[d]=BOOK[g];
               BOOK[g]=p; }
               }}}
       if (b==6) {
        for(h=0; h<N; h++)
        {
          for(u=0; u<N; u++)
          {
            if (BOOK[h].PRICE<BOOK[u].PRICE)
            {
               p=BOOK[h];
               BOOK[h]=BOOK[u];
               BOOK[u]=p; }
               }}}
}
 
void main()
{
 clrscr();
 vvod();
 printf("Do :\n");
 printrezult();
 sort();
 printf("posle :\n");
 printrezult();
 getch();
}
Считываю я такое:

Heaven_Has_No_Favorites Remarque a 413 9 45 Blow_sword Balfour c 685 10 56 Great_expectations Dickens a 1003 10 60

заранее огромное Спасибо!)

Решение задачи: «Считать из файла структуру - Название книги, автор, категория»

textual
Листинг программы
X = fread(&BOOK[0], sizeof(BOOK[N]), N, fp);

Объяснение кода листинга программы

  1. X — это переменная, которая считывает данные из файла.
  2. BOOK[0] — это структура данных, которая содержит информацию о книге.
  3. sizeof(BOOK[N]) — это размер структуры данных BOOK[N].
  4. N — это количество структур, которые нужно считать из файла.
  5. fp — это файловый указатель, который указывает на файл, из которого считываются данные.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.5 из 5
Похожие ответы