帕斯卡。单向列表。环形

Pascal. Unidirectional list. Loop

这是书中的示例程序。我无法停止“while not eof”循环。我试图在程序“Uses crt;”、“const CheckEof: boolean=true”中插入并在 运行 时按“ctrl+Z”,它不起作用。

Program P123;
uses 
  crt; {My insertion}

type 
   Adresacelula = ^Celula;

   Celula = record
     Info: string;
     Urm: AdresaCelula;
   end;

var 
  P, Q, R: AdresaCelula;
  s: string;
  i: integer;

const 
  CheckEOF: boolean = true; {My insertion}

  Procedure Create;
  begin
    p := nil;
    write ('s='); readln (s);
    new (r); r^.Info := s; r^.Urm := nil;
    p := r; q := r;
    write ('s=');
       
    while not eof do {Here is the loop i need to stop}
    begin
      readln (s); write ('s=');
      new (r); r^.Info := s; r^.Urm := nil;
      q^.Urm := r; q := r;
    end;
  end;

  Procedure Display;
  begin
    r := p;

     while r<>nil do
     begin
       writeln (r^.Info);
       r := r^.Urm;
     end;

     readln;
   end;

 begin
   Create;
   Display;

 end.

要使示例正常运行,请删除行

const CheckEOF: boolean=true; {My insertion}

并在主程序中的 Create; 调用之前插入 CheckEOF:=true;。然后程序在您按下 Ctrl-Z 时终止。

您的代码声明了一个新变量 CheckEOF,而您可能想更改 crt 单元的 CheckEOF