|
Delphi 7. Цикл For отрабатывает неверно | ☑ | ||
---|---|---|---|---|
0
Hazer79
25.01.12
✎
11:34
|
Всем дельфятникам привет.
Помнится был однажды уже такой косяк, но за давностью времени не помню как решил, выручайте. var b: Integer; For b := 1 to 19 do begin ... что-то тут делаем end; фишка и трабла в том, что цикл начинается не с 1, а с 19. Пробовал переменную переименовывать, инициализировать до начала цикла, делать другого (byte) типа - всё то же самое. :-( |
|||
1
filh
25.01.12
✎
11:36
|
значит внутри цикла переменная b не задействована.
|
|||
2
Wobland
25.01.12
✎
11:36
|
>Всем дельфятникам привет.
1Cники идут лесом? ;) сколько раз цикл делается? //а не развод ли это? |
|||
3
Ковычки
25.01.12
✎
11:36
|
бинарный файл старый ?
|
|||
4
acsent
25.01.12
✎
11:37
|
не верю
|
|||
5
skunk
25.01.12
✎
11:37
|
(1)и что?
|
|||
6
filh
25.01.12
✎
11:37
|
(5) компилятор умный, цикл гоняет в обратном порядке.
|
|||
7
acsent
25.01.12
✎
11:38
|
(5) если ничего не происходит, то оптимизатор не выполняет цикл
|
|||
8
Wobland
25.01.12
✎
11:39
|
(7) он же внутри что-то делает
|
|||
9
sergeante
25.01.12
✎
11:40
|
(0) оптимизатор оптимизирует. В настройках компилятора можно отключить, если принципиально
|
|||
10
H A D G E H O G s
25.01.12
✎
11:41
|
твои.dcu файлы проекта удали.
|
|||
11
Hazer79
25.01.12
✎
11:41
|
Тело цикла:
if Fil_Data[b, 1] = 0 then Break else begin if Fil_Data[b, 1] = Ints[5, a] then begin IsExist := True; Break; end; end; |
|||
12
Hazer79
25.01.12
✎
11:42
|
+(11) переменная используется
|
|||
13
VasjaIvanov
25.01.12
✎
11:42
|
(0)у меня такого ни разу не было
|
|||
14
skunk
25.01.12
✎
11:44
|
(11)и где тут и=1?
|
|||
15
skunk
25.01.12
✎
11:44
|
смотри чем у тебя иницализированы массивы
|
|||
16
Hazer79
25.01.12
✎
11:45
|
(14) при чём тут и?
|
|||
17
VasjaIvanov
25.01.12
✎
11:45
|
(14) причем тут и )))?
|
|||
18
VasjaIvanov
25.01.12
✎
11:45
|
(16) забавно
|
|||
19
Hazer79
25.01.12
✎
11:45
|
(16)понял
b Имеется ввиду я убрал из иницализации, раз всё равно не помогает |
|||
20
H A D G E H O G s
25.01.12
✎
11:47
|
(19) А как ты понимаешь, что переменная начинается с 19?
|
|||
21
VasjaIvanov
25.01.12
✎
11:48
|
if Fil_Data[b, 1] = 0 then begin
Message(IntToStr(b)); // добавь чтоб посмотреть ))) Break; end; else begin if Fil_Data[b, 1] = Ints[5, a] then begin IsExist := True; Break; end; end; |
|||
22
skunk
25.01.12
✎
11:48
|
(16),(17)ломало английский переключать
|
|||
23
H A D G E H O G s
25.01.12
✎
11:49
|
(21) Локальный массив по умолчанию содержит мусор
|
|||
24
filh
25.01.12
✎
11:50
|
как вариант
b:=1; while b < 20 do begin //что-то тут делаем inc(b); end; |
|||
25
H A D G E H O G s
25.01.12
✎
11:50
|
Message(IntToStr(b)); // добавь чтоб посмотреть )))
if Fil_Data[b, 1] = 0 then begin Break; end; else begin if Fil_Data[b, 1] = Ints[5, a] then begin IsExist := True; Break; end; end; вот так сделай |
|||
26
filh
25.01.12
✎
11:50
|
(20) отлаживает небось и по F7
|
|||
27
ЧеловекДуши
25.01.12
✎
11:50
|
Бред, все там нормально.
Цикл фор начинает исполнять только при изменении переменной "b" в теле цикла :) |
|||
28
VasjaIvanov
25.01.12
✎
11:50
|
скорее всего после break у тебя выскакивает из цикла, тогда вопрос а что ты хотел???
|
|||
29
VasjaIvanov
25.01.12
✎
11:51
|
(27)бред
|
|||
30
VasjaIvanov
25.01.12
✎
11:52
|
Цикл всегда исполняется от и до, значение переменой автоматически изменяется
|
|||
31
NS
25.01.12
✎
11:52
|
IsExist до входа в цикл чему равно?
|
|||
32
H A D G E H O G s
25.01.12
✎
11:53
|
(26) Локальные счетчики при включенной оптимизации не видны в отладке.
|
|||
33
H A D G E H O G s
25.01.12
✎
11:53
|
Автор, а можно всех посмотреть?
|
|||
34
Hazer79
25.01.12
✎
11:57
|
что-то странное
смотрел значения переменных в WatchList. Оттуда и выцепил ошибку. Добавил по совету (21) ShowMessage в цикл. Значение переменной сразу стало 1. О_о Закомментировал ShowMessage - та же самая ошибка. %) (31) False (28) смотрю значение ДО Break DCU стирал - не помогло. (35) всех - это что? |
|||
35
H A D G E H O G s
25.01.12
✎
11:58
|
(34) всех - это что?
Скидывай весь код |
|||
36
Hazer79
25.01.12
✎
12:02
|
Procedure Warraws(sg1, sg4 : TAdvStringGrid);
var Counter, a, b : Integer; Fil_Data : array[1..19,1..3] of Integer; IsExist : Boolean; begin For a := 1 to 19 do begin Fil_Data[a, 1] := 0; Fil_Data[a, 2] := 0; Fil_Data[a, 3] := 0; end; With sg1 do begin Counter := 1; For a := 1 to 19 do begin if Length(Cells[1, a]) > 0 then begin IsExist := False; For b := 1 to 19 do begin if Fil_Data[b, 1] = 0 then begin ShowMessage(IntToStr(b)); Break end else begin if Fil_Data[b, 1] = Ints[5, a] IsExist := True; Break; end; end; end; if not IsExist then begin Fil_Data[Counter, 1] := Ints[5, a] + 100; if Cells[6, a] = '-' then Fil_Data[Counter, 2] := 500 else Fil_Data[Counter, 2] := Ints[6, a] + 4; Fil_Data[Counter, 3] := Ints[3, a ]; Counter := Counter + 1; end; end; end; end; end; |
|||
37
H A D G E H O G s
25.01.12
✎
12:04
|
p.s.
For a := 1 to 19 do begin Fil_Data[a, 1] := 0; Fil_Data[a, 2] := 0; Fil_Data[a, 3] := 0; end; заменить на ZeroMemory(@Fil_Data,sizeOf(Fil_Data)); |
|||
38
Жан Пердежон
25.01.12
✎
12:05
|
(0) ложь и провокация
|
|||
39
Hazer79
25.01.12
✎
12:05
|
(38) Если бы :-(
|
|||
40
H A D G E H O G s
25.01.12
✎
12:11
|
(39) Выключи оптимизацию и пересобери проект
|
|||
41
H A D G E H O G s
25.01.12
✎
12:12
|
Shift+F9
|
|||
42
H A D G E H O G s
25.01.12
✎
12:13
|
И не "гуляйте в тундре под наркотиками", не отлаживайте под оптимизацией.
Вообще забавные вещи происходят. |
|||
43
ЧеловекДуши
25.01.12
✎
12:14
|
(39)Ты переменную "b" когда анализировал, после цикла или в цикле?
Так же, ту не читал про оптимизацию кода, компилятор это делает на автомате, так что советую отрубить оптимизатор и все начнет работать так как ты написал. |
|||
44
Жан Пердежон
25.01.12
✎
12:16
|
какие же?
не верю, что оптимизатор такой херней занимается |
|||
45
H A D G E H O G s
25.01.12
✎
12:21
|
(44) Отлаживал ВК под 1С, например, при попытке
if Status=1 then begin Status:=-4; //давал Access Violation, ...... Status - integer; При оптимизации, выключил - не стало. |
|||
46
H A D G E H O G s
25.01.12
✎
12:22
|
(44) Или вообще на точки останова не реагировал, а в лог писал, что dll подключена, да и функции dll 1С-ка выполняла.
|
|||
47
Hazer79
25.01.12
✎
12:26
|
(40) Спасибо огромное! Помогло! :-)
|
|||
48
Жан Пердежон
25.01.12
✎
12:28
|
имхо, либо проект не пересобран, либо локальные/глобальные переменные одинаковые имена имеют
(45) тоже подозреваю одинаковые имена) |
|||
49
Hazer79
25.01.12
✎
12:30
|
(48) Давал уникальное имя переменной, пересобирал после этого - толку ноль
|
|||
50
H A D G E H O G s
25.01.12
✎
12:50
|
(48) Ну совсем уж за дятла не держите.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |