我的编程任务有问题,我循环一个字符串并对字符的整数值求和。如下面的代码所述。现在我将一个字符串传递给这个子程序。例如给出
num := '8888';
预期输出
32
结果输出
-12
我在Linux环境中使用fpc pascal编译器。任何关于为什么会发生这种情况的见解都将非常感激
procedure subRoutine1(num : string);
var
i : byte;
value : integer;
sum : integer;
begin
sum := 0;
for i := 0 to length(num) do
begin
value := Integer(num[i]) - 48;
sum := sum + value;
end;
writeln(sum);
end;
答案 0 :(得分:3)
for i := 0 to length(num) do...
should be
for i := 1 to length(num) do
Pascal字符串的第一个字节包含字符串的长度 换句话说,num [0]包含值4(字符串长度为4个字符),在减去48之后给出-44,抛弃预期的总和值。
所以你的程序迭代以下值
4 --> -48 = -44
56 --> -48 = 8
56 --> -48 = 8
56 --> -48 = 8
56 --> -48 = 8
sum = -12
同样如其他答案所示,请使用Ord()函数而不是强制转换为Integer,即使用
value := Ord(num[i]) - 48;
or even better,
value := Ord(num[i]) - Ord('0');