Pascal布尔值是多少?

时间:2016-10-10 14:03:50

标签: pascal

我目前正在努力测试用户输入的布尔值,如下所示:

function ReadBoolean(prompt: String): Boolean;
var
    choice: String;
    exit: boolean;
begin
    repeat
    begin
        WriteLn(prompt);
        ReadLn(choice);
        case choice of
        'yes','y','t','true': exit := true;
        'no','n','f','false': exit := false;
        else
            WriteLn('Not a boolean input. Enter again: ');
        end;
    end;
    until exit=true or exit=false;
    result := exit;
end;

在收到指定字符串的输入之前,应该保持循环请求值,但是在我第一次尝试输入'fred'时,布尔变量自动被指定为TRUE并退出函数。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:0)

您的循环在exit=true or exit=false时终止。因为exit只能是这两个值中的一个,所以它总是满足这个条件,所以它永远不会运行你的循环。

但是,请考虑在开始循环之前明确设置exit := false的值。

答案 1 :(得分:0)

根据我的理解,您只希望在用户输入某些特定字符串时结束循环。

可以通过修改until这样的条件来实现:

choice='yes' or choice='y' or choice='t' or choice='true' or choice='no' or choice='n' or choice='f' or choice='false'

或者,创建一个无限循环并在用户输入预期字符串时将其中断:

while true do
  ...
  'yes','y','t','true':
    begin
      exit := true;
      break;
    end;
  'no','n','f','false':
    begin
      exit := false;
      break;
    end;
  ...
end;

答案 2 :(得分:0)

你在这里问的是“可以为空”的布尔值(值为true,值为false,未提供值)。据我所知,它没有以任何Pascal方言实现。因此,您必须将您的指示拆分为两个单独的标志:a)用户是否提供了格式良好的输入; b)输入被识别为真或假

function ReadBoolean(prompt: String): Boolean;
var
    choice: String;
    exit: boolean;
    recognized: boolean; { this is our termination flag }
begin
    recognized := false; { we place it to false initially as no user input recognized yet }
    repeat
    begin
        WriteLn(prompt);
        ReadLn(choice);
        case choice of
        'yes','y','t','true': begin exit := true; recognized := true; end; { we mark it as recognized }
        'no','n','f','false': begin exit := false; recognized := true; end; { we mark it as recognized }
        else
            WriteLn('Not a boolean input. Enter again: ');
        end;
    end;
    until not recognized; { we keep asking for user input until known input provided }
    result := exit;
end;