2014-05-02 66 views
0

這是一些代碼。我是新來的pascal鏈接列表,並在例子中做了所有事情。但是我得到無限循環.. 代碼: 從txt文件以數據 `爲什麼即時通訊使用pascal鏈表進行無限循環?

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; 
    .... 

看來,這應該工作然而無限循環發生。

回答

0

您正在外部while not eof循環中分配新的g,但您在while not eoln循環中多次將其鏈接到列表中。您將需要在內部循環中分配g