这是一些代码。我是pascal链接列表的新手,并在示例中做了所有事情。但是我得到无限循环.. 码: 从txt文件中获取数据 `
procedure SukurtiSarasa(var pradzia, pabaiga :sarasas; var sukurtas: boolean);
var sk, x: integer;
g: sarasas;
duom : text;
s : string;
begin
sk:=0;
pradzia := nil;
pabaiga := nil;
writeln('Nurodykite faila is kurio uzkrausite sarasa.');
readln;
readln(s); // trash
assign(duom, s);
reset(duom);
while not eof(duom) do
begin
new( g );
while not eoln(duom) do
begin
read(duom, g^.nr); read(duom, g^.stotPav); readln(duom, g^.kelSk);
g^.rodykle := nil;
if pradzia = nil then // Sukuriam pirmaji elementa.
pradzia := g
else // Kitus elementus jungiam paskui pirmaji.
pabaiga^.rodykle := g;
pabaiga := g;
inc(sk);
end;
end;
clrscr;
writeln('Sarasas sekmingai uzkrautas');
// pasizymime, kad jau turime sukurta sarasa
sukurtas:= true;
close(duom);
end;
查看数据:
procedure AtspausdintiSarasa(pradzia:sarasas);
begin
if pradzia = nil then
Writeln('Sarasas neuzkrautas')
else
begin
writeln('Autobuso Nr Stoteles pavadinimas Keleiviu skaicius');
while pradzia <> nil do
begin
writeln(pradzia^.nr:15,' ',pradzia^.stotPav:15,' ',pradzia^.kelSk);
pradzia := pradzia^.rodykle;
end;
end;
end;
主:
type sarasas = ^elem;
elem = record
nr, kelSk: integer;
stotPav: string[20];
rodykle: sarasas;
end;
var ....
pradzia, pabaiga: sarasas;
sukurtas: boolean;
begin
....
sukurtas:= false;
pradzia := nil;
pabaiga := nil;
....
看起来这应该有效,但是会出现infintie循环。
答案 0 :(得分:0)
您在外部g
循环中分配了新的while not eof
,但是您在while not eoln
循环中多次将其链接到列表中。您需要在内循环中分配g
。