![]() |
| ||
|
|
Новости |
Поиск |
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), но вот цикл начинает почему-то выполнятся.
boalse (2005-12-30 06:33:00) [1]
> Буду переставлять Delphi
По-любому дело было не в бобИне...
evvcom (2005-12-29 15:48:00) [2]
> сегодня утром запустил тот самый код и все само собой заработало.
Ты больше не кури на компутер, просто он был под балдой, вот и вытворял невесть чего.
stef (2005-12-29 12:57:00) [3]Здравствуйте, уважаемые, не поверите, сегодня утром запустил тот самый код и все само собой заработало. Чест слово ничего там не трогал, специально весь ошибочный код целиком скопировал. Буду переставлять Delphi. Спасибо за помощь. С наступающим
evvcom (2005-12-29 09:56:00) [4]
> Если цикл нужно выполнять обязательно в любых услових, четкое
> количество раз тогда for
Правильно. Только в нашем случае его надо выполнить 0 раз. Экономим на одном if.
beglec (2005-12-29 09:52:00) [5]Лично я рассуждаю так.
Если цикл нужно выполнять обязательно в любых услових, четкое количество раз тогда for
если цикл выполнять не обязательно или есть хоть бы маленьшая вероятность того, что условия могут не подойти к циклу, тогда делаю While.
Repeat очень и очень редко использую.
Видимо не так мыслю как остальные ;)
evvcom (2005-12-29 09:35:00) [6]
> просто никогда такую извращенную формулировку не использовал
чем же она извращена? Я имею ввиду, если вместо -1 все же переменная с таким значением. Очень удобно пользоваться.
beglec (2005-12-29 07:26:00) [7]-> vidiv
а ты проверь цикл а я посмотрю на сколько он у тебя бесконечный
i это позиция в файле :)
Size - это размер файла.
то что у него внутри цикла не совсем то, это уже другой вопрос.
а на счет for it:=0 to -1 doпризнаю был не прав :) Действительно цикл не выполняется
просто никогда такую извращенную формулировку не использовал :)
применял в таких случаях While :)
vidiv (2005-12-29 07:16:00) [8]
> beglec © (27.12.05 11:17) [7]
> While i<size do
> begin
> seek(f,i);
> read(f,tmp);
> add_sg(inttostr(tmp.TabNumb),tmp.FIO);
> end;
если файл будет не пустой, то цикл будет бесконечным... теория блин
The_scorpion (2005-12-28 20:04:00) [9]
> но вопрос остается вопросом без ответа.
Цикл for прост как полено, никак вопросов быть не может...
Выполни просьбу господина Johnmen © (28.12.05 14:57) [17] и тебе все объяснят.
Johnmen (2005-12-28 14:57:00) [10]>stef © (28.12.05 14:43) [16]
Приведи ещё раз код с циклом, объявлением переменных и заголовком процедуры/функции.
stef (2005-12-28 14:43:00) [11]Спасибо народ за веимание к моей персоне. Цикл я уже заменил, но вопрос остается вопросом без ответа.
Что касается эффекта переполнения переменной, если она типа byte, то это-то я предусмотрел сразу: integer она. Это точно.
Книжки действительно надо читать внимательней всем.
Может глюк какой. Просто мой код до сих пор выполняет цикл от нуля до минус одного.
Я тут подумал, а не мог он (цикл) пойти выполняться в обратную сторону, то есть вроде как вместоtoсработаломdownto. Вы меня понимаете. Я к сожалению не могу посмотреть, что произойдет после первого же шага (как будет изменяться переменная i) прога сразу вылетает.
Никто с таким приколом не сталкивался?
ЗЫ всех с настыпающим
SergP. (2005-12-27 21:42:00) [12]
> >FOR выполняется в любом случае хотя бы раз!
Не нада....
The_scorpion (2005-12-27 16:14:00) [13]
> С каких пор цикл For? именно FOR стал ни разу не выполняется!
> ?
Со времен арифмометров...:)))
Johnmen (2005-12-27 16:00:00) [14]А в чём суть? B этом?
>beglec © (27.12.05 11:17) [7]
>FOR выполняется в любом случае хотя бы раз!
:)))
boalse (2005-12-27 15:55:00) [15]
> MBo © (27.12.05 12:00) [11]
Блин, ну конечно же два. Но сути это не меняет.
MBo (2005-12-27 12:00:00) [16]>beglec © (27.12.05 11:17) [7]
Неправильные ты какие-то книжки читал...
boalse © (27.12.05 11:22) [10]
>for I:=0 Downto -1 do
>при тех же условиях один раз выполнится.
Два раза
boalse (2005-12-27 11:22:00) [17]
> учи теорию !!!
Ага, и тебе тогоже.
for I:=0 to -1 do
не выполнится, если I: Integer. Книжкам доверяй, но проверяй!
А вот
for I:=0 Downto -1 do
при тех же условиях один раз выполнится.
beglec (2005-12-27 11:19:00) [18]Да, конечно предварительно i:=0 :)
TUser (2005-12-27 11:19:00) [19]А зачем тут тубу файл с произволльным доступом. Делай while not eof(f) do ...
beglec (2005-12-27 11:17:00) [20]Едрен батон!
учи теорию !!!
С каких пор цикл For? именно FOR стал ни разу не выполняется!?
Во всех учебниках написано
FOR выполняется в любом случае хотя бы раз!
For I:=0 to 0 do - выполняется 1 раз в любом случае
и типы тут не причем. Cardinal и Byte это другий совершенно случай
предлагаю заменить твой цикл на следующее
While i<size do
begin
seek(f,i);
read(f,tmp);
add_sg(inttostr(tmp.TabNumb),tmp.FIO);
end;
вот и все.
P.S. Ну вы блин даете.