Считать из файла структуру - Название книги, автор, категория - 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);
Объяснение кода листинга программы
X
— это переменная, которая считывает данные из файла.BOOK[0]
— это структура данных, которая содержит информацию о книге.sizeof(BOOK[N])
— это размер структуры данныхBOOK[N]
.N
— это количество структур, которые нужно считать из файла.fp
— это файловый указатель, который указывает на файл, из которого считываются данные.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д