Код:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<malloc.h>
struct elem { int i;
elem *next;
};
elem *input(elem *);
void output(elem *);
elem *finput(elem *);
void file_in(elem * );
void freesp(elem *);
int schet(elem *);
elem* file_out(elem *);
void main (void)
{
elem *start=NULL, *posl=NULL;
elem *p;
int l=0;
int n,w,c;
do
{
clrscr();
puts("Viberite punct menu\n");
puts("1.Dobavit' vkonec spiska");
puts("2.Dobavit' v nachalo spiska");
puts("3.Vivesti spisok");
puts("4.Ydalenie 1ogo elementa");
puts("5.Soxranit' v file");
puts("6.Zagryzit' iz file");
puts("7.Vixod");
switch(getch())
{
case'1':
clrscr();
if(start==NULL)
{
start=input(posl);
posl=start;
}
else
posl=input(posl);
w=1;
getch();
break;
case'2':
clrscr();
start=finput(start);
c=1;
getch();
break;
case'3':
if(w==1 || c==1)
{
clrscr();
output(start);
}
else
puts("Spisok pust");
getch();
break;
case'4':
if(w==1 || c==1)
{
clrscr();
p=start->next;
free(start);
start=p;
puts("element ydalen");
}
else
puts("Spisok pust");
getch();
break;
case'5':
file_in(start);
clrscr();
puts("File soxranen");
getch();
break;
case'6':
start=file_out(start);
clrscr();
case'7':
freesp(start);
clrscr();
l=1;
break;
default:
puts("net takogo puncta");
getch();
}
}
while(l==0);
}
elem *input(elem *posl)
{
if (posl==NULL)
{
posl=(elem*)malloc(sizeof(elem));
}
else
{
posl->next= (elem*)malloc(sizeof(elem));
posl=posl->next; //perexod na sled element
}
puts("Vvedite chislo: \n");
scanf("%d",&posl->i);
posl->next=NULL;
return posl;
}
void output(elem *start)
{
puts("Prosmotr spiska\n");
while(start !=NULL)
{
printf("%d ",start->i);
start=start->next;
}
}
elem* finput(elem* start)
{
elem *f;
if(start==NULL)
{
start=(elem*)malloc(sizeof(elem));
puts("Vvedite chislo");
scanf("%d",&start->i);
start->next=NULL;
}
else
{
f=(elem*)malloc(sizeof(elem));
puts("Vvedite chislo");
scanf("%d",&f->i);
f->next=start; //prisvoili poly next znach
start=f;
}
puts("element dobavlen");
getch();
return(start);
}
void file_in(elem* start)
{
int n;
FILE* fp;
elem* flw;
if(start!=NULL)
{
n=schet(start);
printf("%d",n);
if((fp=fopen("C:\\spisok.txt","wt"))==NULL)
{
puts("Oshibka");
getch();
exit(1);
}
fprintf(stdout,"%d\n",n);
while(flw)
{
fprintf(fp,"%d",flw->i);
flw=flw->next;
}
}
else
puts("zapisan");
getch();
fclose(fp);
}
void freesp(elem *start)
{
elem *prom;
printf("ochistka\n");
prom=start;
while (prom !=NULL)
{
start=start->next;
free(prom);
prom=start;
}
}
int schet(elem* start)
{
int j=0;
while(start!=NULL)
{
j++;
start=start->next;
}
return j;
}
elem* file_out(elem* start)
{
int i,n;
FILE *fp;
elem *flw;
if((fp=fopen("C:\\spisok.txt","r"))==NULL)
{
puts("Oshibka");
getch();
exit(1);
}
else
{
freesp(start);
fscanf(fp,"%d",&n);
flw=start=(elem*)malloc(sizeof(elem));
for(i=0;i<(n-1);i++)
{
fscanf(fp,"%d",&(flw->i));
flw->next=(elem*)malloc(sizeof(elem));
flw=flw->next;
}
fscanf(fp,"%d",&(flw->i));
flw->next=NULL;
}
fclose(fp);
return start;
}
Помогите пожалуйста при работе функции elem* file_out(elem* start) (вывод односвязного списка из файла) вылетает из программы
не знаю в чем проблема...