Юлиана Иванова
Юлиана Иванова

PascalABC,нужно заполнить стек из файла, у меня считывает только последний символ, помогите исправить ошибку

type
ch = char;
PElem = ^TElem; //указатель на запись
TElem = record
info: ch; //информационная часть
next: Pelem; //указатель на следующий элемент
end;

var
p, top: PElem; //вспомагательный указатель и указатель на вершину стека
f: Text; //файловая переменная
s: char; //переменная для считывания из файла
i: integer;

procedure create();
begin
Assign(f,'text.txt');
Reset(f);
new(p);
p^.next:=top;
while not Eof(f) do
begin
read(f,s);
p^.info:=s;
top:=p;
end;
end;

procedure Chtenie();
begin
top:=p;
while p<>nil do
begin
writeln(p^.info);
p:=p^.next;
end;
end;

begin
create();
Chtenie();
end.

КК
Курбон Курбонов

Все законно! В процедуре Create() вы выделяете память для одного указателя p и в дальнейшем работаете только с ним, постоянно изменяя значение начала списка top. Поэтому в вашем списке и остается только последний символ. Попробуйте процедуру ввода сделать такой (в ваших обозначениях Top - указатель на начало списка, P - текущий указатель) .

procedure create();
begin
Assign(f,'text.txt');
Reset(f);
while not Eof(f) do begin
Read(f, s);
if Top = Nil then begin
New(P);
Top := P;
end
else begin
New(P^.Next);
P := P^.Next;
end;
P^.Info := s;
P^.Next := Nil;
end;
end;

Кстати, в процедуре чтения нужно присваивать текущему указателю значение начала списка, а не наоборот.

Похожие вопросы
Ошибка: переполнение стека
помогите исправить ошибки
Можно ли в паскале считывать данные из файла дважды?
Подскажите, пожалуйста, что исправить, чтобы программа заработала в PascalABC?
pascalABC ПОМОГИТЕ ПОЖАЛУЙСТА
Дан стек из 5 символов, вытащить из стека символы.
Помогите исправить ошибку в PascalABC!!!
Помогите пожалуйста исправить программу в PascalABC...
Помогите решить PascalABC
Помогите в Pascal. Нужно поменять последнюю и первую записи в файле местами. Где ошибка? Что я не так делаю?