Код:
if(choice==3)
appeand();
/#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>
#define N 3
struct student {
char name[50];
char surname[50];
unsigned char year;
struct student* next;
struct student* prev;
} ;
struct student* InputElement(){
struct student* p=(struct student*)malloc(sizeof(struct student));
printf("input name:\n");
scanf("%s",p->name);
printf("input surname:\n");
scanf("%s",p->surname);
printf("input age:\n");
scanf("%d",&(p->year));
p->next=NULL;
p->prev=NULL;
return p;
};
struct student* AddToList(struct student* root,struct student* p){
if(NULL==p){
return root;
};
p->next=root;
p->prev=p->next;
return p;
};
void Max(struct student* root){
if(NULL==root)
return;
struct student* p=root;
int max;
while(p->next!=NULL){
if (p->next->year>max) {
max=p->next->year;
}
p=p->next;
}
printf("A senior student is %d\n**********************\n",max);
};
void Output(struct student* p){
while(p!=NULL){
printf("%s\t",p->name);
printf("%s\t",p->surname);
printf("%d\n",p->year);
p=p->next;
};
};
void FreeList(struct student* root){
if(NULL==root)
return;
struct student* q=root;
struct student* p=root->next;
struct student* f=root->prev;
while (q){
if(q==NULL){
return;
}
free(q);
q=p;
if(q){
p=q->next;
f=q->prev;
};
};
};
long size(FILE*f){
long current=ftell(f);
fseek(f,0,SEEK_END);
long size=ftell(f);
fseek(f,current,SEEK_SET);
return size;
}
struct student* root=NULL;
void write(){
for(int i=0;i<N;i++){
root=AddToList(root,InputElement());
};
struct student*p=root;
FILE*f2=fopen("student.txt","w");
while(p!=NULL){
fwrite(p,sizeof(p),1,f2);
p=p->next;
};
Max(root);
Output(root);
FreeList(root);
fclose(f2);
}
void read(){
FILE*f2=fopen("student.txt","r");
struct student*p=(struct student*)malloc(sizeof(struct student));
fread(&p,sizeof(p),1,f2);
while(p!=NULL){
for(int i=0;i<N;i++){
root=AddToList(root,p);
};
p=p->next;
};
Output(root);
fclose(f2);
}
void appeand(){
FILE*f2=fopen("student.txt","a");
long offset=ftell(f2);
void*e=(FILE*)malloc(offset);
for(int i=0;i<N;i++){
root=AddToList(root,InputElement());
}
struct student*p=root;
while(p!=NULL){
fwrite(e,sizeof(p),1,f2);
p=p->next;
};
free(e);
FreeList(root);
fclose(f2);
}
void main(){
int choice;
printf("1-read\n2-write\n3-appeand\n");
scanf("%d",&choice);
if(choice==1)
read();
if(choice==2)
write();
}[code][/code]
Добавлено спустя 27 секунд:
Программа вылетает при чтении из файла.