Помогите исправить ошибку. Когда читаешь из файла во время работы программы то все вроде нормально, но когда выйдешь из нее и запустишь заново, то программа отказывается читать из него и либо зависает, либо выдает ошибку с кодом 203.
Прикрепленные файлы
pack.zip ( 1.64 килобайт )
Кол-во скачиваний: 161
ты его не закрываешь добавь close(f);
при чтении
я поставил close и у меня при повторном запуске вылетать перестала.
Добавил close(f) и только все равно в процедуре Insert_List на месте new(pList) ошибку 203 выдает. И еще почему-то после неудачного чтения фаил увеличивается в размере с 1Kb до 23Mb. С чем это связано?
У тебя она (Insert_List) совсем не правильна. Объясни назначение переменных lp,pList,pStart:pEl_list.
Как я понял
pList - вспомогательная, лучше не делать глобальной
lp - указывает на последний элемент списка
pStart - на первый, ее можно и нужно убрать
И вообще лучше комментируй код.
слушай, парень, помоему у тебя ваапще стек не правильно реализован, ты залезь в FAQ, есть неплохая работа со списками и стеками авось поможет
http://forum.pascal.net.ru/index.php?showtopic=2706
Не знаю как стек, но список точно не правильно..
Вот рабочий вариант, разбирайся.
program MIFI;
uses crt;
Const
p_menu:array[1..4] of string[30]=(
'1.‘®§¤ вм д ©« Ё бЇЁб®Є',
'2.Џа®зЁв вм д ©« Ё§ бЇЁб®Є ',
'3.‚лў®¤ бЇЁбЄ нЄа ',
'4.‚л室');
type
list_d=record
Title:string[20];
Nm,Pt,data,pol:string[15];
mesto,adres:string[30];
end;
ff=file of list_d;
pEl_list=^list;
list=record
li:list_d;
next:pEl_list;
end;
var
lp,pList:pEl_list;
f:ff;
li:list_d;
noswap:Boolean;
ch:char;
i,oi,kol,nomermenu:integer;
procedure init;
begin
lp:=nil;
end;
procedure DeleteList;
begin
while lp<>nil do begin
pList:=lp;
lp:=lp^.next;
Dispose(pList);
end;
end;
procedure Insert_list(el:list_d);
begin
new(pList);
with pList^ do begin
li.Title:=el.Title;
li.Nm:=el.Nm;
li.Pt:=el.Pt;
li.data:=el.data;
li.pol:=el.pol;
li.mesto:=el.mesto;
li.adres:=el.adres;
next:=lp;;
end;
lp:=pList;
end;
procedure SaveBase_in_file;
var
FileName:string;
k:char;
begin
FileName:='wer.bas';
Assign(f,FileName);
Rewrite(f);
repeat;
with li do begin
writeln('‚ў®¤ЁвҐ бЇЁб®Є:':25);
write('” ¬Ё«Ёп: ');
readln(Title);
write('€¬п: ');
readln(Nm);
write('ЋвзҐбвў®: ');
readln(Pt);
write('„ в ஦¤ҐЁп: ');
readln(data);
write('Џ®«: ');
readln(pol);
write('ЊҐбв® а Ў®вл: ');
readln(mesto);
write('„®¬ иЁ© ¤аҐб: ');
readln(adres);
end;
write(f,li);
writeln('…бвм ҐйҐ бўҐ¤ҐЁп ¤«п бЇЁбЄ ?');
readln(k);
until k='n';
close(f);
writeln('„ лҐ б®еа Ґл. Ќ ¦¬ЁвҐ «оЎго Є« ўЁиг.');
readkey;
end;
procedure List_creat;
begin
Init;
Assign(f,'wer.bas');
reset(f);
while not EoF(f) do begin
read(f,li);
Insert_list(li);
end;
close(f);
end;
procedure List_displ;
Var i:integer;
begin
i:=1;
plist:=lp;
writeln('‘ЇЁб®Є Ў®Ґв®ў Ё¬ҐойЁебп ў д ©«Ґ');
while plist<>nil do begin
write(i,' ');
write(lp^.li.Title+' ');
write(lp^.li.Nm+' ');
write(lp^.li.Pt+'; ');
write(lp^.li.data+'; ');
write(lp^.li.pol+'; ');
write(lp^.li.mesto+'; ');
writeln(lp^.li.adres);
plist:=plist^.next;
i:=i+1;
end;
end;
procedure MENU(var nomermenu:integer);
var
x,y,i:integer;
c:char;
begin
x:=28;
y:=1;
gotoXY(x,8);
textcolor(13);
writeln(' ‚лЎҐаЁвҐ ЇгЄв ¬Ґо: ');
textcolor(3);
for i:=1 to 4 do begin
gotoXY(x,i+8);
writeln(p_menu[i]);
end;
textcolor(4);
gotoXY(x,y+8);
writeln(p_menu[y]);
while true do begin
c:=readkey;
case ord( c ) of
80:if y<4 then y:=y+1;
72:if y>1 then y:=y-1;
13:break;
end;
gotoXY(x,8);
textcolor(13);
writeln(' ‚лЎҐаЁвҐ ЇгЄв ¬Ґо: ');
textcolor(3);
for i:=1 to 4 do begin
gotoXY(x,i+8);
writeln(p_menu[i]);
end;
textcolor(4);
gotoXY(x,y+8);
writeln(p_menu[y]);
end;
nomermenu:=y;
textcolor(white);
end;
begin
while true do begin
clrscr;
menu(nomermenu);
case nomermenu of
1:begin clrscr;
writeln('„®«¦Ґ д®а¬Ёа®ў вмбп бЇЁб®Є');
SaveBase_in_file;
end;
2:begin clrscr;
{if pStart=nil then begin }
writeln('Џа®зЁв ©вҐ ¤ лҐ Ё§ д ©« ');
List_creat;
readln; end;
3:begin clrscr;
List_displ;
readln;
end;
4:begin clrscr;
writeln('‚л е®вЁвҐ гЁз⮦Ёвм бЇЁб®Є - y or n?':36);
readln(ch);
if ch='y' then DeleteList;
halt;
end;
end;
end;
end.