Function 为什么Pascal中需要这些代码行?
下面的Pascal示例在一本专门介绍编程基础知识的书中给出。函数ReadLongint应该检查输入是否是0-9编码的字符类型。然后,该函数根据检查结果返回true或false,并返回一个用于计算的变量,该变量通过运算符ord()呈现为整数。 作为一个新手,我很难弄清楚这段代码到底是如何工作的。但对我来说,更大的谜团是第9行的必要性Function 为什么Pascal中需要这些代码行?,function,repeat,pascal,ord,Function,Repeat,Pascal,Ord,下面的Pascal示例在一本专门介绍编程基础知识的书中给出。函数ReadLongint应该检查输入是否是0-9编码的字符类型。然后,该函数根据检查结果返回true或false,并返回一个用于计算的变量,该变量通过运算符ord()呈现为整数。 作为一个新手,我很难弄清楚这段代码到底是如何工作的。但对我来说,更大的谜团是第9行的必要性 'repeat read(c); position := position + 1; until (c <
'repeat
read(c);
position := position + 1;
until (c <> #32) and (c <> #10);'
”重复
读(c);
位置:=位置+1;
直到(c#32)和(c#10);'
我可以看到,如果你输入空格或输入,它是一个循环,它会重复自身。但是,我检查了没有这些行的程序,用一个简单的read(c),而且这个计划似乎运行得很好。有人能解释一下这一行在例子中的作用吗
以下是完整的程序:
function ReadLongint(var check: longint): boolean;
var
c: char;
number: longint;
position: integer;
begin
number := 0;
position := 0;
repeat
read(c);
position := position + 1;
until (c <> #32) and (c <> #10);
while (c <> #32) and (c <> #10) do
begin
if (c < '0') or (c > '9') then
begin
writeln('Unexpected ''', c, ''' in position: ', position);
readln;
ReadLongint := false;
exit
end;
number := number * 10 + ord(c) - ord('0');
read(c);
position := position + 1
end;
check := number;
ReadLongint := true
end;
var
x, y: longint;
ok: boolean;
begin
repeat
write('Please type the first number: ');
ok := ReadLongint(x)
until ok = true;
repeat
write('Please type the second number: ');
ok := ReadLongint(y)
until ok = true;
writeln(x, ' times ', y, ' is ', x * y)
end.
函数ReadLongint(变量检查:longint):布尔值;
变量
c:半焦;
编号:longint;
位置:整数;
开始
编号:=0;
位置:=0;
重复
读(c);
位置:=位置+1;
直至(c#32)及(c#10);
而(c#32)和(c#10)是
开始
如果(c<0')或(c>9'),则
开始
writeln('Unexpected'',c','in position:',position);
readln;
ReadLongint:=假;
出口
结束;
编号:=编号*10+ord(c)-ord('0');
读(c);
位置:=位置+1
结束;
检查:=编号;
ReadLongint:=真
结束;
变量
x、 y:长型;
ok:布尔;
开始
重复
写('请键入第一个数字:');
正常:=ReadLongint(x)
直到ok=true;
重复
写('请键入第二个数字:');
正常:=ReadLongint(y)
直到ok=true;
写入(x,'次',y,'是',x*y)
结束。
“而且程序似乎运行得很好”尽管如此,它是否仍能完成预期的功能?如果输入123,在x
中会得到什么结果?@Michael是的,结果是一样的。至少我没有看到任何错误啊,对,它只是丢弃了前导空格和换行符。所以原始代码允许您在第一个数字前面写多个空格。@Michael,哦,还没见过这个。非常感谢你!查看第二个循环的条件(实际读取数字的条件),并考虑如果用“<代码>读取< /代码>替换第一个循环”,可能包含< <代码> > >代码>。在调试器中单步执行代码(如果有帮助)。