尝试并抓住Pascal

时间:2011-05-20 18:35:06

标签: error-handling try-catch pascal

我正在使用Dev-Pas 1.9.2并尝试确保在输入符号或字母值时程序不会崩溃。

我用Google搜索并用Google搜索,无法找到有关如何实现这一目标的任何信息。

非常感谢任何帮助。谢谢!

以下是我正在尝试管理输入的代码:

 Function GetMenuChoice : Integer;
  Var
    OptionChosen : Integer;
  Begin
    Write('Please enter your choice: ');
    Readln(OptionChosen);
    If (OptionChosen < 1) Or ((OptionChosen > 4) And (OptionChosen <> 9))
      Then
        Begin
          Writeln;
          Writeln('That was not one of the allowed options.  Please try again: ');
        End;
    GetMenuChoice := OptionChosen;
  End;

3 个答案:

答案 0 :(得分:1)

将代码更改为接受Char;如果由于某种原因需要整数,请在之后处理转换。

这适用于Delphi;除非您不能使用像['1'..'4','9']这样的集合并设置运算符,否则它应该可以正常工作。

Function GetMenuChoice : Char;
Var
  OptionChosen : Char;
Begin
  repeat
    Write('Please enter your choice: ');
    Readln(OptionChosen);

    If not (OptionChosen in ['1'..'4', '9'])
      Then
        Begin
          Writeln;
          Writeln('That was not one of the allowed options.  Please try again: ');
        End;
  until OptionChosen in ['1'..'4', '9'];
  GetMenuChoice := OptionChosen;
End;

如果您绝对需要返回一个数字,请将返回类型更改回整数(或字节),然后将最后一行更改为:

GetMenuChoice := Ord(OptionChosen) - 48;  

GetMenuChoice := Ord(OptionChosen) - Ord('0');

答案 1 :(得分:0)

(除Ken White之外)

  1. 我认为可以使用READ作为char类型的变量,并保存用户输入enter。

  2. 但我会选择字符串类型并使用VAL。

    • 这是更多编码不可知的东西,
    • 原则超越了价值9。
    • 虽然需要输入,但重度输入会使屏幕搞乱。
  3. 对于后者还有其他方法(例如使用单位Crt或视频),但这可能超出了作业的范围

答案 2 :(得分:0)

你真的想接受四种不同的输入吗? (数字1,2,3,4和9) 这就是你现在所要​​求的。

注意:即使像第一个回复者建议的更改,您的代码也有一个专业 问题。如果给出5或Q会发生什么......你抱怨,然后退出 常规。

在原始代码中,如果我输入100,您将打印&#34;那是不允许的&#34; ... 然后将100返回给调用者。

提示:循环。

提示2:确保您不会永远循环

BTW,从不ord (some character) - 48 相反,始终使用:ord (some character) - ord ('0')

为什么呢?两个显而易见的原因:

  1. 可读性。什么48?

  2. 正确性。如果您在非ASCII系统上编译,则48可能不是 0的字符代码。

  3. 斯坦