Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.01.2010, 22:17   #1
dr.Chas
***
Участник клуба
 
Аватар для dr.Chas
 
Регистрация: 30.07.2007
Сообщений: 1,162
По умолчанию Вопрос об ошибке For loop control variable must...

Замечал такую ошибку часто, но как то раньше не задумывался, что в этом плохо ведь работает, а спросить особо и не у кого
Сегодня вот надумал всё таки спросить.

Описание:
Цитата:
For loop control variable must be simple local variable. Параметр цикла должен быть простой локальной (описанной в этом же блоке) переменной.
Код:
Код:
var a: array[1..20] of integer;
    i,n: integer;

procedure inputMassiv;
begin
  for i:=1 to n do
    readln(a[i]);
end;

begin 
  inputMassiv;
end.
И вот такую ошибку пишет. Почему нельзя так писать?
dr.Chas вне форума Ответить с цитированием
Старый 08.01.2010, 22:33   #2
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

В данном случае :
Цитата:
[Warning] Project1.dpr(15): For loop control variable must be simple local variable
компилятор нас только предупреждает об опасности, что в некой другой процедуре или функции может быть использована эта переменная (а следовательно, ее значение может поменяться и цикл будет не правильно что то считать нам ), т.к. эта переменная является глобальной для всех процедур и функций.
Но использовать можете в циклах как глобальные так и локальные переменные, правильней все же будет - локальные.
Вот как то так.
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 08.01.2010, 22:35   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

в Паскале и послеПаскальных языках переменная в FOR должна быть локально обьявлена. Она не может быть глобальной. Это атавизм но с ним приходится иногда мириться ибо FOR как правиль оспользует вместо переменной регистры EAX или ECX.
Посему пиши:
Код:
procedure inputMassiv;
var i: integer;
begin
  for i:=1 to n do
    readln(a[i]);
end;
или луче
Код:
procedure inputMassiv;
begin
 i:=1;
  while (i<n) do begin
    readln(a[i]);
   inc(i);
  end;
end;
и не забывай проверять не вылезает ли переменная i за предел массива
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка - Run-time error '91' Object variable or With block variable not set Артур Иваныч Microsoft Office Excel 13 12.09.2012 14:18
For loop control variable must be simple local variable Hehe Общие вопросы Delphi 11 26.12.2011 19:42
Вычитание и LOOP lordus Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 14.11.2009 17:20
Undefined variable SPY-FeinD PHP 5 27.05.2009 19:41
Assignment to FOR-Loop variable zotox Помощь студентам 4 24.03.2009 11:32