Error handling 试着用帕斯卡语抓住
我使用的是devpas1.9.2,我试图确保当输入符号或字母值时程序不会崩溃 我在谷歌上搜索了又搜索,找不到任何解决方法来实现这一点 非常感谢您的帮助。谢谢 以下是我试图管理输入的代码:Error handling 试着用帕斯卡语抓住,error-handling,try-catch,pascal,Error Handling,Try Catch,Pascal,我使用的是devpas1.9.2,我试图确保当输入符号或字母值时程序不会崩溃 我在谷歌上搜索了又搜索,找不到任何解决方法来实现这一点 非常感谢您的帮助。谢谢 以下是我试图管理输入的代码: Function GetMenuChoice : Integer; Var OptionChosen : Integer; Begin Write('Please enter your choice: '); Readln(OptionChosen); If (Opti
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;
函数GetMenuChoice:Integer;
变量
OptionChosen:整数;
开始
写('请输入您的选择:');
Readln(选择权);
如果(OptionChosen<1)或(OptionChosen>4)和(OptionChosen 9))
然后
开始
书面语;
Writeln('这不是允许的选项之一。请重试:');
结束;
GetMenuChoice:=OptionChosen;
结束;
将代码改为接受字符;如果出于某种原因需要整数,请稍后处理转换 这在Delphi中工作;除非您不能使用像
['1'..'4','9']
和set操作符这样的集合,否则它应该可以正常工作
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;
或
(除了肯·怀特的)
- 这是一种更不可知的编码方式
- 这一原则超越了价值9
- 但需要输入,输入过多会弄乱屏幕
对于后者,还有其他方法(例如使用单位Crt或视频),但这可能超出了分配的范围您真的要接受四种不同的可能输入吗? (数字1、2、3、4和9) 这就是你现在的要求 注意:即使像第一个回答者建议的那样进行了更改,您的代码也有一个主要的错误 问题如果给出5或Q,会发生什么。。。你抱怨,然后退出 例行公事 在原始代码中,如果我输入100,您将打印“这是不允许的”。。。 然后将100返回给调用者 提示:循环 提示2:确保不要永远循环 顺便说一句,从不做:
ord(某些字符)-48
相反,请始终使用:ord(某些字符)-ord('0')
为什么??两个明显的原因:
Stan在Delphi中,相当于
try…catch
的是try…except
。freepascal也一样,turbo pascal也不例外。但是我从来没有听说过DevPascal,所以我不能帮上忙。但是我的建议是读取一个字符串,然后使用像Val
这样的函数来解析它,而一开始就不会抛出异常。我该如何进行编码呢?Devpascal是一个用Delphi编写的IDE,它调用FPC1.9.2(从2004年左右开始)命令行编译器来编译结果。它是使用GCCSTN编译的C++变体的DeVCPP的兄弟姐妹,我的答案接受了<代码> Q>代码>或<代码> A<代码>,并且不退出例程。它也不接受除原始问题所要求的字符1
、2
、3
、4
和9
之外的任何答案。(作为记录,数字1、2、3、4和9是5种可能的输入,而不是4.:)我建议也使用Ord('0')
。如果您只寻找单个数字输入(或仅仅是数字输入),编码不可知并不重要Char
(在Pascal的Unicode版本中表示AnsiChar)支持大于“9”的值,enter表示用户输入的结束;使用Read
不允许用户键入错误内容并希望退格/重新键入以修复错误。谢谢!我现在明白了!我还在另一个功能上使用了你的建议。但是我有一个小问题,我已经在这里发布了
GetMenuChoice := Ord(OptionChosen) - Ord('0');