Из функции в заголовочном файле записать данные в структуру - C (СИ)
Формулировка задачи:
Подскажите , что я не так делаю. Надо из функции в заголовочном файле записать данные в структуру.
Вот код:
Файл main.c
Файл File.h
Файл File.c
Заранее спасибо.
#include<stdio.h>
#include <string.h>
#include "file.h" //Чтение и запись в файл. Функции OUT(int n,struct tele *dan) и IN(int n,char *File,struct tele *dan)
#define NK 10 //Количество элементов базы данных
#define File "File.txt" //Тестовый файл для проверки работоспособности функций
struct tele
{
int Id;
char Number[10];
char Name[25];
long NumberTele;
float Usp;
};
struct tele *Basa;
void main()
{
char c;
printf("1 - Read File\n");
printf("2 - Write File\n");
printf("Esc - Exit\n");
while(1){
c=getch();
switch(c)
{
case 27:
exit(1);
break;
case '2':
IN(NK,File,Basa);
break;
case '1':
for(int i = 0; i<NK; i++)
{
Basa=(struct tele *)malloc(sizeof(struct tele));
OUT(Basa[i].Id,Basa[i].Number,Basa[i].Name,Basa[i].NumberTele,Basa[i].Usp);
}
break;
case '3':
for(int i=0;i<NK;i++)
printf("%d %s %s %ld %f \n",Basa[i].Id,Basa[i].Number,Basa[i].Name,Basa[i].NumberTele,Basa[i].Usp);
}
}
}#ifndef FILE_H #define FILE_H OUT(int Id,char *Number,char *Name,long NumberTele,float Usp); void IN(int n,char *File,struct tele *dan); #endif
#include <stdio.h>
#include <conio.h>
#include "file.h"
struct tele
{
int Id;
char Number[10];
char Name[25];
long NumberTele;
float Usp;
};
OUT(int Id,char *Number,char *Name,long NumberTele,float Usp)
{
FILE *in;
if((in = fopen("tele.db","r")) == NULL)
{
printf("Faila net!!!"); exit(1);
}
fscanf(in, "%d;%7s;%[^;]s", &Id,Number,Name);
fscanf(in, ";%ld;%f;",&NumberTele,&Usp);
}
IN(int n,char *Fail,struct tele *dann)
{
FILE *out;
out = fopen(Fail,"w");
for( int i = 0 ; i < n ; i++)
{
fprintf(out,"%d %s %s %ld %f \n",dann[i].Id,dann[i].Number,dann[i].Name,dann[i].NumberTele,dann[i].Usp);
}
fclose(out);
}Решение задачи: «Из функции в заголовочном файле записать данные в структуру»
textual
Листинг программы
#include<stdio.h>
#include <string.h>
#include "file.h" //Чтение и запись в файл. Функции OUT(int n,struct tele *dan) и IN(int n,char *File,struct tele *dan)
#define NK 10 //Количество элементов базы данных
#define File "File.txt" //Тестовый файл для проверки работоспособности функций
struct tele
{
int Id;
char Number[10];
char Name[25];
long NumberTele;
float Usp;
};
void main()
{
char c;
struct tele *Basa[NK];
printf("1 - Read File\n");
printf("2 - Write File\n");
printf("Esc - Exit\n");
while(1){
c=getch();
switch(c)
{
case 27:
exit(1);
break;
case '2':
IN(NK,File,Basa);
break;
case '1':
for(int i = 0; i<NK; i++)
{
Basa[i]=(struct tele *)malloc(sizeof(struct tele));
OUT(Basa[i]->Id,Basa[i]->Number,Basa[i]->Name,Basa[i]->NumberTele,Basa[i]->Usp);
}
break;
case '3':
for(int i=0;i<NK;i++)
printf("%d %s %s %ld %f \n",Basa[i]->Id,Basa[i]->Number,Basa[i]->Name,Basa[i]->NumberTele,Basa[i]->Usp);
}
}
}
Объяснение кода листинга программы
В этом коде определен заголовочный файл file.h, который содержит функции для чтения и записи данных в файл. Файл называется File.txt. Также определена структура данных tele, которая содержит поля для хранения информации об идентификаторе, номере, имени, номере телефона и успеваемости.
В функции main() создается массив структур tele с размером NK и осуществляется его инициализация. Затем пользователю предлагается выбрать действие из меню:
- Чтение файла (case '1'): для каждого элемента массива структур tele вызывается функция OUT(), которая записывает данные в файл.
- Запись файла (case '2'): вызывается функция IN(), которая считывает данные из файла и сохраняет их в массиве структур tele.
- Выход из программы (case '27'): программа завершается.
- Показать данные (case '3'): для каждого элемента массива структур tele выводится информация на экран. Программа работает в цикле, пока пользователь не выберет действие '27'.