Динамический массив строк пропускает первый индекс - PullRequest
0 голосов
/ 09 декабря 2018

Я делаю программу, в которой пользователь вводит заработную плату, имя и количество рабочих часов в месяц для определенного числа сотрудников.Этот фрагмент кода предназначен для получения Nemp сотрудников, а затем запрашивает Nemp имен.Проблема в том, что он всегда пропускает первое имя, дважды отображает «Имя сотрудника:» и не позволяет пользователю вставить первое.Я не понимаю, почему это происходит, любая помощь будет принята с благодарностью!

program test;

uses crt;

var 
i, Nemp : integer;
employee: array of string;

BEGIN

    read(Nemp);
    SetLength (employee, Nemp);

    for i:=1 to Nemp do

    Begin

        writeln ('Employee name: ');
        readln (employee[i]);

    end;

END.

1 Ответ

0 голосов
/ 09 декабря 2018

Динамические массивы начинаются с нуля.Вы должны зациклить с нуля до Nemp-1.Или цикл от нуля до High(employee).

И, как указывают @Rudy и @trincot, чтобы прочитать длину массива employee, используйте ReadLn(Nemp), чтобы избежать нежелательных входных эффектов.


Совет:

Включите проверку диапазона и переполнения в компиляторе при отладке.Это обнаружило бы ошибку в верхнем диапазоне.

...