我正在使用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;
答案 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之外)
我认为可以使用READ作为char类型的变量,并保存用户输入enter。
但我会选择字符串类型并使用VAL。
对于后者还有其他方法(例如使用单位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')
为什么呢?两个显而易见的原因:
可读性。什么48?
正确性。如果您在非ASCII系统上编译,则48可能不是 0的字符代码。
斯坦