Надо переделать программу для работы с файлом на программу для работы с динамической памятью. Язык: С
Надо переделать программу для работы с файлом на программу для работы с динамической памятью, язык программирования: С. А именно: что бы данные сохранялись в файл, а читались в массив в динамической памяти, все операции приведенные ниже должны выполняться в динамической памяти. Добавить в файл первую строку с количеством записей в файле(пустой файл = 0), запись и чтение выполнять через fwrite(), fread().
Задание: студенты заданы именем, группой и средним балом. Требуется вывести одногруппников и полную информацию про студента по его имени. Буду рад любой помощи по работе.Спасибо^_^
#include<stdio.h>
#define SZ 20
#include <string.h>
FILE* mfopen(char,char*,FILE*);
void zapoln (FILE*,char*);
int menu ();
void groupfind (FILE*,char*);
void namefind (FILE*,char*);
void printall (FILE*,char*);
void clear(FILE*,char*);
int main (){
FILE *f;
char *fname = "new.txt";
fclose(f);
while (11){
switch (menu()){
case 1: printall(f,fname);break;
case 2: groupfind(f,fname);break;
case 3: namefind(f,fname);break;
case 4: zapoln(f,fname);break;
case 5: clear(f,fname);break;
case 6: return 0;break;
case 7: printf ("This program has been made by student KN-207\nDima Paliyuk\nThx for using my program\n");break;
}
}
return 0;
}
void zapoln (FILE *f,char *fname){
f = mfopen('a',fname,f);
int group=0;
char name[SZ];
float midm=0;
printf("Please print information which will fill stucture\n-----If you want to stop filling print '/stop' in the NAME field----\n");
while(11){
printf ("Print the name of student\n");
scanf("%s",name);
getchar();
if (strcmp("/stop",name)==0)break;
printf ("Print the groupnumber of student\n");
scanf("%i",&group);
printf ("Print midmark of student\n");
scanf("%f",&midm);
fprintf(f,"%s %i %.1f\n",name,group,midm);
}
fclose(f);
puts("File has been closed");
}
int menu (){
int i,g;
char *mitems[]={
"Show all",
"Find by group",
"Find by name",
"Fill",
"Clean",
"Exit",
"About"
};
for(i=0;i<sizeof mitems/sizeof mitems[0];i++)
printf ("%i - %s\n",i+1,mitems[i]);
scanf("%i",&g);
getchar();
return g;
}
void groupfind(FILE *f,char *fname){
f = mfopen('r',fname,f);
char name[SZ];
float midm=0;
int i,group=0;
printf ("Print the groupnumber\n");
scanf("%i",&i);
while (feof(f)==0){
fscanf(f,"%s %i %f", name, &group,&midm);
if (i==group&&feof(f)==0)
printf ("| %s | %i | %.1f |\n",name,group,midm);
}
fclose(f);
puts("File has been closed");
}
void namefind(FILE *f,char *fname){
f = mfopen('r',fname,f);
int group=0;
float midm=0;
char n[SZ],name[SZ];
printf ("Print the student's name\n");
scanf("%s", n);
while (feof(f)==0) {
fscanf(f,"%s %i %f", name, &group,&midm);
if (strcmp(n,name)==0){
printf ("| %s | %i | %.1f |\n",name,group,midm);
break;
}
}
fclose(f);
puts("File has been closed");
}
void printall(FILE *f,char *fname){
f = mfopen('r',fname,f);
char str;
while(11) {
str = fgetc(f);
if(str==EOF)
break;
printf("%c", str);
}
fclose(f);
puts("File has been closed");
}
FILE* mfopen(char g,char *fname,FILE *f){
if(g=='a'){
f = fopen(fname,"a");
puts("File has been open for writing and adding");
return f;
}
if(g=='r'){
f = fopen(fname,"r");
puts("File has been open for reading");
return f;
}
if(!f) {
printf("File open error: '%s'\n", fname);
return 0;
}
}
void clear (FILE *f,char *fname){
f = fopen(fname,"w");
printf("File '%s' has been cleared\n",fname);
fclose(f)
}