1
votes

My Pascal program has a menu in the main begin statement and 4 procedures. Within each procedure I am confirming to the user if they would like to return to the menu else the program will quit, however every time the program is meant to quit, it returns to the menu again.

procedure quit;
begin
  writeln('<Enter> to quit...');
  readln;
end

procedure error;
begin
  writeln('Error. Try Again...');
  readln;
end;

procedure option1;
begin
  clrscr;
  writeln('this is option 1');
  writeln('would you like to continue? (y/n)');
  readln(confirm);
  if confirm = 'y' then
  begin 
    writeln('something will happen...');
  end;

  if confirm = 'n' then
    begin
      writeln('Return to main menu ? (y/n)');
      readln(option);
      if option = 'y' then
        exit
      else
        quit;
    end;  
end;

procedure option2;
begin
  clrscr; 
  writeln('this is option2');
  writeln('would you like to continue? (y/n)');
  readln(confirm);
  if confirm = 'y' then
  begin 
    writeln('something will happen...');
  end;

  if confirm = 'n' then
    begin
      writeln('Return to main menu ? (y/n)');
      readln(option);
      if option = 'y' then
        exit
      else
        quit;
    end; 
end;

Main begin statement:

begin
  repeat
    1: clrscr;
    writeln('Pascal Menu');
    gotoxy(4, 3);
    writeln('1. Option 1');
    gotoxy(4, 4);
    writeln('2. Option 2');
    gotoxy(4, 5);
    writeln('0. Quit Program');
    readln(choice);

    if choice > 2 then
    begin
      error
    end;

  case choice of
    1: option1;
    2: option2;
    0: quit;
  end;
  until choice = 0;

  exit;           
end.

I'm relatively new to Pascal and any help would be greatly appreciated.

2

2 Answers

6
votes

Call halt passing the required exit code:

halt(0);

If you omit the exit code, then a default value of 0 is used:

halt;
0
votes

One method I have working is to assign 0 to the choice variable in the quit procedure. This way when the program drops back to the main begin statement the until condition is met and will jump out of the loop. Allowing the program to quit.

procedure quit;
begin
  writeln('<Enter> to quit...');
  readln;
  choice := 0;
end