Как записать структуру в файл - 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();
}

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

  1. Включаемые заголовочные файлы: stdafx.h, stdlib.h, stdio.h, conio.h, math.h, locale.h.
  2. Объявление переменных: счётчик i, строки для имени h, отчества o, фамилии u, года g, баллов по русскому p, математике m, физике fi, количество студентов n, среднее арифметическое c, указатель на файл f.
  3. Функция opros_k() считывает фамилию, имя и отчество студента.
  4. Функция opros2_k() считывает год рождения, баллы по русскому, математике и физике студента.
  5. Структура sp содержит поля для фамилии, имени, отчества, года рождения, баллов по русскому, математике, физике и среднего арифметического c. Также в структуре есть указатель на следующий элемент списка next.
  6. В функции main() создаётся файл STYDENTbl для записи данных.
  7. Пользователю предлагается ввести количество студентов.
  8. Данные каждого студента считываются в функции opros_k(), затем в функции opros2_k().
  9. В цикле for производится запись данных каждого студента в файл STYDENTbl с помощью функции vivod(n).
  10. Файл закрывается, и программа завершается.

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


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

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

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