Как записать структуру в файл - 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). - Файл закрывается, и программа завершается.