Как записать структуру в файл - C (СИ)
Формулировка задачи:
У меня такая задача, создать структуру, записать ее в файл и редактировать т.е добавлять студентов или редактировать уже записанных ...
начало у меня есть, а как дальше...подскажите пожалуйста
#include <iostream> #include <stdio.h> #include <fstream> using namespace std; int main() { struct student { char name[30]; char sname[30]; float ball; int age; }; { struct student stud[30]; int i=0, n,j; printf("Number of Students:"); scanf("%d", &n); for(i=0;i<n;i++) { printf("Enter the name:"); scanf("%s", stud[i].name); printf("Enter the surname:"); scanf("%s", stud[i].sname); printf("Enter age:"); scanf("%d", &stud[i].age); printf("Enter ball:"); scanf("%f", &stud[i].ball); } // Вывод printf("\n------------------------------------------------------"); printf("\n| № | Name | Surname | Age | Ball |"); printf("\n------------------------------------------------------"); for(i=0;i<n;i++) { j=i+1; printf("\n|%-7d|%-10s|%-13s|%-9d|%-10.2f|",j,stud[i].name, stud[i].sname, stud[i].age, stud[i].ball); } printf("\n------------------------------------------------------"); } }
Очень надо... помогите...
Решение задачи: «Как записать структуру в файл»
textual
Листинг программы
#include"stdafx.h" #include"stdlib.h" #include"stdio.h" #include"conio.h" #include"math.h" #include"locale.h" int i;//cчётчик char* h;//переменная для имени char* o;//переменная для отчества char* u;//переменная для фамилии int g;//год int p;//бал по русскому int m;//бал по математике int fi;//бал по физике int n;//количество студентов float c;//среднееарифметическое FILE *f; char* opros_k() { printf("введите фамилию\n"); scanf("%s",&u); printf("введите имя\n"); scanf("%s",&h); printf("введите отчество\n"); scanf("%s",&o); return u,h,o; } int opros2_k() { printf("введите год рождения\n"); scanf("%d",&g); printf("введите количество баллов по русскому\n"); scanf("%d",&p); printf("введите количество баллов по математике\n"); scanf("%d",&m); printf("введите количество баллов по физике\n"); scanf("%d",&fi); return g,p,m,fi; } struct sp { char* o,u,h; int g,p,m,fi,c; sp* next; } *start,*next,*tec,*nel; void vivod(int n)//вывод списка { tec = start; for (i = 1; i <= n; i++) { fprintf(f,"Студент %d\n", i); fprintf(f,"фамилия: %s\n",tec->u); fprintf(f,"имя: %s\n",tec->h); fprintf(f,"отчество: %s\n",tec->o); fprintf(f,"бал по русскому: %d\n",tec->p); fprintf(f,"бал по математике : %d\n",tec->m); fprintf(f,"бал по физике: %d\n",tec->fi); c=((float)p+(float)m+(float)fi)/3; fprintf(f,"средний бал: %d\n",tec->c); tec = tec->next; } } void main(void) { setlocale(LC_ALL,"Russian"); f=fopen("STYDENTbl","wb"); printf("введите количество студентов\n"); fprintf(f,"введите количество студентов\n"); scanf("%d",&n); fprintf(f,"%d\n",n); for(i=0;i<n;i++) { opros_k(); opros2_k(); vivod(n);// не выводит в файл } fclose(f); getch(); }
Объяснение кода листинга программы
- Включаемые заголовочные файлы:
stdafx.h
,stdlib.h
,stdio.h
,conio.h
,math.h
,locale.h
. - Объявление переменных: счётчик i, строки для имени h, отчества o, фамилии u, года g, баллов по русскому p, математике m, физике fi, количество студентов n, среднее арифметическое c, указатель на файл f.
- Функция opros_k() считывает фамилию, имя и отчество студента.
- Функция opros2_k() считывает год рождения, баллы по русскому, математике и физике студента.
- Структура sp содержит поля для фамилии, имени, отчества, года рождения, баллов по русскому, математике, физике и среднего арифметического c. Также в структуре есть указатель на следующий элемент списка next.
- В функции main() создаётся файл
STYDENTbl
для записи данных. - Пользователю предлагается ввести количество студентов.
- Данные каждого студента считываются в функции opros_k(), затем в функции opros2_k().
- В цикле for производится запись данных каждого студента в файл
STYDENTbl
с помощью функции vivod(n). - Файл закрывается, и программа завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д