![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не правильно работает цикл for
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 или тому подобным.