运行时错误201 at fpc

时间:2013-12-01 18:49:17

标签: runtime-error pascal freepascal

我一直在编写一个关于猜测数字的游戏,我必须将4位数字分成数字并将数字放入数组。但是该部分使用fpc继续给我运行时错误201.但是当我使用ideone.com时它给了我我想要的东西。我无法弄清楚它是不是一个错误?抱歉我的英语。

program game;
var
    number : array [1..4] of integer;
    z, i, j: integer;
    number_4digit: integer;
begin
     readln(number_4digit);
     for i := 4 downto 1 do begin
        j := i;
        z := number_4digit;
        while z > 10 do begin
            z := z div 10;
     end;   
     number[5-i] := z;
     repeat
           z := z * 10;
           j := j - 1;
     until j = 1;
     number_4digit:= number_4digit - z;
     write(number[5-i], ' ');  
end;    
end.

编辑:我解决了这个问题。感谢Marco van de Voort。

repeat
      z := z * 10;
      j := j - 1;
until j = 1;

我将此部分更改为此内容。

while j > 1 do begin
 z := z * 10;
     j := j - 1;
end;    

2 个答案:

答案 0 :(得分:2)

运行时错误201是范围检查错误。

使用-gl进行编译,您将看到程序在运行时错误中崩溃的位置。它是第16行(z := z * 10;),意味着您的z溢出。请注意,integer是FPC中带符号的16位类型(最大值为2 ^ 15 - 1 = 32767)。

答案 1 :(得分:1)

  1. 在for循环之后,J总是1。
  2. 然后在重复循环中它递减(到j = 0)。
  3. 哪个不等于1,所以它再次减少到-1直到-32768然后它翻到32767
  4. 然后进一步32767到1.
  5. 总之,重复完成65536 +/- 1次。从代码中我不清楚J变量的含义。评论更多。