为什么我仍然得到exitcode 201?

时间:2017-10-11 16:36:36

标签: pascal freepascal

我做了一些搜索,说它是关于存储一个不适合的值,但我不知道它是如何在我的代码中发生的。我检查了我的代码很多次,但我仍然得到这个。我做了一些搜索,说它是关于存储一个不适合的值,但我不知道它是如何在我的代码中发生的。我多次查看我的代码,但我还是得到了这个。

program ACT2;

uses crt;

var
    inputs : array[1..5] of integer;
    index1 : integer;
    choice : char;
    toPrint : integer;

function getSUM(var inputArray : array of integer) : integer;
var
    SUM, sumIndex : integer;

begin  
    SUM := 0;
    sumIndex := 1;

    repeat
    SUM := SUM + inputArray[sumIndex];
    sumIndex := sumIndex + 1;
    until (sumIndex > 5);

    getSUM := SUM;
end;


begin

clrscr;

    for index1 := 1 to 5 do
    begin
        write('Input Integer[', index1); write(']: ');
        readln(inputs[index1]);
    end;

clrscr;

write('Integers:');

for index1 := 1 to 5 do
begin
    write('  ', inputs[index1]);
end;

writeln(''); writeln(''); writeln('');

writeln('[1]  SUM');
writeln('[2]  AVERAGE');

writeln('');

write('INPUT: ');

readln(choice);


if(choice = '1') then
    toPrint := getSUM(inputs);

writeln(toPrint);
readkey;
end.

3 个答案:

答案 0 :(得分:2)

在函数声明中

<script src="https://code.jquery.com/jquery-3.1.1.slim.min.js" integrity="sha384-A7FZj7v+d/sdmMqp/nOQwliLvUsJfDHW+k9Omg/a/EheAdgtzNs3hpfag6Ed950n" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min.js" integrity="sha384-DztdAPBWPRXSA/3eYEEUWrWCy7G5KFbe8fFjk5JAIxUYHKkDx6Qin1DkWx51bBrb" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js" integrity="sha384-vBWWzlZJ8ea9aCX4pEW3rVHjgjt7zpkNpZk+02D9phzyeVkE+jo0ieGizqPLForn" crossorigin="anonymous"></script>

inputArray在打开数组上(参见FPC参考手册14.4.5,打开数组参数)。索引边界为0到4,更好 使用function getSUM(var inputArray : array of integer) : integer; low(inputArray)。在你的重复循环中使用 inputArray [5],其中索引5超出范围。

答案 1 :(得分:2)

您在函数GetSum中犯了错误。

参数var inputArray : array of integer是一个从零开始索引的开放数组。

请参阅Run-time errors

  

201范围检查错误

     

如果您使用范围检查编译了程序,则在以下情况下可能会出现此错误:

* An array was accessed with an index outside its declared range.
* Trying to assign a value to a variable outside its range (for instance an enumerated type).

这里使用的声明范围之外的索引。

让你的循环像这样:

for sumIndex := 0 to High(inputArray) do ...

这将使函数成为通用的,与数组大小无关。

答案 2 :(得分:2)

另外两个答案已正确识别问题的原因,即您使用两种不同的数组类型,不同的基数,1对0。

但是,您可以通过声明自己的整数数组类型然后一致地使用它来避免此问题,  如在

type
  TInputArray = array[1..5] of Integer;
var
    inputs : TInputArray; //array[1..5] of integer;
    index1 : integer;
    choice : char;
    toPrint : integer;

//function getSUM(var inputArray : array of integer) : integer;
function getSUM(var inputArray : TInputArray) : integer;
var
    SUM, sumIndex : integer;

begin

    SUM := 0;
    sumIndex := Low(inputArray);

    repeat
      SUM := SUM + inputArray[sumIndex];
      sumIndex := sumIndex + 1;
    until (sumIndex > High(inputArray));

    getSUM := SUM;
end;

请注意,整数5仅在此版本的程序中出现一次,使用标准LowHigh函数意味着5只需要一个地方const NumOfElements = 5; type TInputArray = array[1..NumOfElements] of Integer; 如果要更改数组的大小,可以更改。事实上,将元素数量定义为常量并在数组声明中使用常量可能更好,如

commands:
  01_yum_update:
    command: sudo yum -y update
  02_epel_repo:
    command: sudo yum-config-manager -y --enable epel
  03_install_gdal_packages:
    command: sudo yum -y install gdal gdal-devel

files:
  "/etc/httpd/conf.d/wsgihacks.conf":
    mode: "000644"
    owner: root
    group: root
    content: |
      WSGIPassAuthorization On

packages:
  yum:
    git: []
    postgresql95-devel: []
    gettext: []
    libjpeg-turbo-devel: []
    libffi-devel: []