Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.17;
Скачать: CL | DM;

Вниз

Проблема с циклoм For To do.   Найти похожие ветки 

 
slivka   (2003-11-06 14:09) [0]

Этот код предназдначен для поиска установленных в интернет адаптеров.
Но определяет он только последний устновленный.
Часть кода которая находится после этой строки выполняется только один раз

if (m = "ethernet")then else goto www;

а все переменные хранят значения относящиеся к последнему найденуму адаптеру.
Наверное я что-то с циклами не так сделал ?

procedure TForm1.Button4Click(Sender: TObject);
label www, qqq;

var
reg: TRegistry;
a: integer;
u: string;
m: string;
begin

for a := 0 to 11 do
begin
if ( a = 9 ) or ( a < 9 ) then else u := "00"+IntToStr(a); goto qqq;
begin
u := "000"+IntToStr(a);
end;
qqq:;
reg:=TRegistry.Create;
reg.RootKey:=HKEY_LOCAL_MACHINE;
reg.OpenKey("SYSTEM\ControlSet001\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\"+u+"\Ndi\Interfaces",false);
m := reg.ReadString("LowerRange");
reg.CloseKey;
if (m = "ethernet")then else goto www;
begin
reg.OpenKey("SYSTEM\ControlSet001\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\"+u,false);
listbox1.Items.add(reg.ReadString("DriverDesc"));
reg.CloseKey;
end;
www:;
end;
reg.free;
end;

end.


 
keymaster ©   (2003-11-06 14:18) [1]

Моя имха - ошибка тут:

if (m = "ethernet")then else goto www;
т.е. если m = "ethernet" то ничего не происходит,
а иначе топаем к www.

если не ошибаюсь, то надо так:

if (m = "ethernet")then
begin
reg. OpenKey("SYSTEM\ControlSet001\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\"+u,false);
listbox1.Items.add(reg.ReadString("DriverDesc"));
reg.CloseKey;
end;
reg.free;

а www как бы и не нужен...
end;


 
dead1   (2003-11-06 14:26) [2]

if a > 9 then
begin
u := "000"+IntToStr(a);
end else
u := "00"+IntToStr(a);

Тогда вообще без лэйбелов.


 
slivka   (2003-11-06 14:31) [3]

Непомогло, Все равно определяется только последний.
а вот если убрать отсюда GOTO qqq;

for a := 0 to 11 do
begin
if ( a = 9 ) or ( a < 9 ) then else u := "00"+IntToStr(a); goto qqq;
begin
u := "000"+IntToStr(a);
end;
qqq:;

То определяется только первый установленный интернет адаптер.


 
pasha_golub ©   (2003-11-06 15:28) [4]

Я конечно выскажу свое ИМХО, но ребяты Метки только усложняют отладку кода, перепиши без меток


 
slivka   (2003-11-06 15:35) [5]

Окей спасибо, все переделал и заработало.


 
zapped ©   (2003-11-06 15:38) [6]

выскажу-ка и я свою имху:
это
if ( a = 9 ) or ( a < 9 ) then
равно этому
if a <= 9 then, что проще для понимания, а значит и эффективней для отладки...
и выходить из цикла по метке - дурной тон...
тем более, что это легко сделать иначе
присоединюсь к pasha_golub © (06.11.03 15:28) [4]
переделай без меток, забудь про них...
где-то читал: " если в коде ипользуются метки, значит, алгоритм построен неэффективно"...
и почитайте про процедуры continue и break


 
zapped ©   (2003-11-06 15:38) [7]

опоздал :))



Страницы: 1 вся ветка

Текущий архив: 2003.11.17;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.016 c
1-56577
Abrakadabra
2003-11-06 00:03
2003.11.17
Сравнение файлов


3-56490
Duce
2003-10-28 14:12
2003.11.17
Обработать отмену удаления.


3-56470
Kinder
2003-10-22 15:47
2003.11.17
Как обработать SQL запрос?


1-56709
Zheks
2003-11-07 11:05
2003.11.17
Типы


1-56631
rosl
2003-11-05 07:45
2003.11.17
даты на кварталы