为什么我用pascal链表获得无限循环?

时间:2014-05-02 12:58:53

标签: list loops linked-list pascal infinite

这是一些代码。我是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循环。

1 个答案:

答案 0 :(得分:0)

您在外部g循环中分配了新的while not eof,但是您在while not eoln循环中多次将其链接到列表中。您需要在内循环中分配g