即使当常量定义为 1 到 maxint 时,Pascal 仍然接受 0
Even when constant is define as 1 to maxint , 0 is still accepted in Pascal
我很困惑,因为当我在 Pascal 中定义从 1 到 maxint 的类型时,我选择了“0”,它应该 return 返回到重复循环。这是我的代码:
坦克计划;
type
tZahl = 1..maxint;
var
tag1 : tZahl;
wahl : tZahl;
liter,
p : real;
BEGIN
repeat
write ('Bitte Tag eingeben 1=Mon 2=Die 3=Mit 4=Don 5=Fre 6=Sam 7=Son: ');
readln (tag1);
writeln(tag1);
until tag1 <= 7;
....
end
这就是我的常量、类型和变量的样子。 Si 我将 tag1 定义为 tZahl,它应该是从 1 到 maxint,但是当我 运行 在第一个重复循环中输入“0”时,它是如何被接受的。我发现这有点混淆任何想法?
要在运行时强制进行类型范围检查,您需要通过在程序顶部添加 {$R+} 来明确告诉编译器使用最常用的编译器。
然而这只会引发运行时错误,这不是您想要的输入验证。您确实需要自己编写输入验证程序。例如。通过读取字符串,然后使用 VAL() 过程将其转换为数字并检查代码参数是否有错误。
我很困惑,因为当我在 Pascal 中定义从 1 到 maxint 的类型时,我选择了“0”,它应该 return 返回到重复循环。这是我的代码:
坦克计划;
type
tZahl = 1..maxint;
var
tag1 : tZahl;
wahl : tZahl;
liter,
p : real;
BEGIN
repeat
write ('Bitte Tag eingeben 1=Mon 2=Die 3=Mit 4=Don 5=Fre 6=Sam 7=Son: ');
readln (tag1);
writeln(tag1);
until tag1 <= 7;
....
end
这就是我的常量、类型和变量的样子。 Si 我将 tag1 定义为 tZahl,它应该是从 1 到 maxint,但是当我 运行 在第一个重复循环中输入“0”时,它是如何被接受的。我发现这有点混淆任何想法?
要在运行时强制进行类型范围检查,您需要通过在程序顶部添加 {$R+} 来明确告诉编译器使用最常用的编译器。
然而这只会引发运行时错误,这不是您想要的输入验证。您确实需要自己编写输入验证程序。例如。通过读取字符串,然后使用 VAL() 过程将其转换为数字并检查代码参数是否有错误。