Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Не правильно работает цикл for


Страницы:   1 2

stef ©   (2005-12-27 06:00:00) 

Может кто уже встречался с чем-то подобным
Есть код:
var
 size:integer;
 f:file of TRecDriv;
 tmp:TRecDriv;

...  
...
   size:=filesize(f)-1;
   for i:=0 to size do
   begin
     seek(f,i);
     read(f,tmp);
     add_sg(inttostr(tmp.TabNumb),tmp.FIO);
   end;

В котором, при пустом файле f, в переменную size должно быть присвоено (-1) и тогда цикл не должен выполнится ни разу.
При выполнении программы (при пустом файле) в переменную size действительно попадает значение (-1), но вот цикл начинает почему-то выполнятся.


Deka   (2005-12-27 10:42:00) [21]

Я бы все-таки перед циклом проверку поставил. Оптимизация, конечно, оптимизацией, а надежность все-таки главнее. Поменяют реализацию FOR в будущих версиях Дельфи и ищи потом эту ошибку... А IF как был, так и останется!


begin...end   (2005-12-27 10:13:00) [22]

> Чапаев ©   (27.12.05 10:11) [4]

Не получим, т.к. size -- это переменная, а не константа.


Чапаев   (2005-12-27 10:11:00) [23]


> Значит, даже если size будет отрицательным

...то получим кучу ворнингов. Автор, предупреждения при компиляции были?


boalse   (2005-12-27 09:14:00) [24]


> [2] begin...end ©   (27.12.05 08:58)


Хе, точно!


begin...end   (2005-12-27 08:58:00) [25]

> boalse ©   (27.12.05 06:22) [1]

Если I -- это Byte, Word или Cardinal, а Size = -1, то цикл в [0] выполнится не 1 раз, а 256, 65536 и 4294967296 раз, соответственно.


boalse   (2005-12-27 06:22:00) [26]

А что такое I?
Если это byte или word  или Cardinal, то там нижняя граница 0. Значит, даже если size будет отрицательным, то в цикле for i:=0 to size do
I всё равно будет меняться от 0 до 0 и он будет выполняться в любом случае 1 раз. Выбирай I - Integer или тому подобным.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо