Главная страница
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.047 c
14-56908
esu
2003-10-25 07:09
2003.11.17
Буква е (с двумя точками сверху)


11-56540
Bartov
2003-02-27 02:07
2003.11.17
MCK - Хромой?!...


1-56666
Yanis
2003-11-05 10:15
2003.11.17
Prisoedinenie


1-56555
Poof-poof
2003-11-08 01:40
2003.11.17
Как сделать так чтобы форму нельзя было ресайзнуть?


4-56970
Ozi
2003-09-23 14:15
2003.11.17
Как с эмулировать нажатие на Enter