alaskafx
@alaskafx
Не .do Frontend

Как исправить «Ошибка времени выполнения: Индекс находился вне границ массива»?

Есть код:
##
var num:integer;
read(num);

 var a:array of integer;
 SetLength(a, num);
 for var i:= 0 to num do begin
   Read(a[i]);
   end;


Суть в том, что юзер сначала вводит длину массива, а после сами значения, НО когда дело доходит до последнего элемента (к примеру 6) - я получаю ошибку вида "Ошибка времени выполнения: Индекс находился вне границ массива".

Как исправить?
  • Вопрос задан
  • 55 просмотров
Пригласить эксперта
Ответы на вопрос 1
HemulGM
@HemulGM
Delphi Developer, сис. админ
Подумай головой.
Допустим, num у тебя = 6. И ты говоришь, что в массиве будет 6 элементов.
6 элементов с нуля это какие индексы?
Это 0, 1, 2, 3, 4, 5. Это и есть 6 элементов. У тебя нет элемента с индексом 6, потому что это уже 7ой элемент

for var i := 0 to num - 1 do
или
for var i := 0 to Pred(num) do
а лучше всего использовать спец функции, универсальный способ для всех массивов
for var i := Low(a) to High(a) do
также, можно вообще не использовать индексы, а перебрать все элементы (но это только для чтения из массива)
for var i in a do
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы