Что нового

изменить значение переменной

andreitrane

Новичок
Сообщения
141
Репутация
3
почему если в функцию вставить несколько раз изменение переменной, в ходе функции переменная не меняется?
как можно поправить?
Код:
_e()

Func _e()
$d = 1
	$k = StringSplit("1,2,3,4", ",")
	if $d = $k[0] Then
	$d = 1
	EndIf
	Global $s = $k[$d]
	_s()
	$d+= 1
	_s()
	$d += 1
	_s()
	$d+= 1
	_s()
	$d+= 1
	_s()
	$d+= 1
	EndFunc

Func _s()
	MsgBox(0, "", $s)
	EndFunc
 

edward_freedom

Осваивающий
Сообщения
200
Репутация
44
а если так
Код:
_e()
Func _e()
    $k = StringSplit("1,2,3,4", ",")
    for $i = 1 to UBound($k, 1)-1
	msgbox(0, "", $k[$i])
    next
    EndFunc
 

SyDr

Сидра
Сообщения
651
Репутация
158
Ну, во первых, это какой-то убийственный способ писать код.
Во вторых, следи за ходом мысли:
Глобальная переменная $s получает значение 1
Функция _s() показывает значение переменной $s = 1
Меняется значение переменной $d (и она больше не влияет на $s)
Функция _s() показывает значение переменной $s = 1
И т.д.
 
Автор
A

andreitrane

Новичок
Сообщения
141
Репутация
3
edward_freedom
если бы можно было сделать так, то я бы вас и не спрашивал
SyDr
в моем скрипте $k - это не просто числа, а список серверов, функция _s - это отправка данных на сервер, во время функци _e скрипт должен несколько раз отправить данные на разные сервера
допустим
Код:
$k = stringsplit("1 сервер,2 сервер,3 сервер", ",")

первоначально $d = 1, сервер $k[$d], то есть $k[1], то есть "1 сервер", функция _s отправляет данные на первый сервер, затем к $d добавляется 1, значит $k[$d] = $k[2], а то есть - "2 сервер"
_s отправляет данные на второй сервер, $d + 1 и т.д.

но почему то если в функцию ставить $d += 1, сам сервер меняется после завершения функции _e
это то мне и надо поправить
 

SyDr

Сидра
Сообщения
651
Репутация
158
andreitrane [?]
если бы можно было сделать так, то я бы вас и не спрашивал
А как тогда должно быть сделано?

в моем скрипте $k - это не просто числа, а список серверов, функция _s - это отправка данных на сервер, во время функци _e скрипт должен несколько раз отправить данные на разные сервера
А не важно это. Суть в том, что изменение значения переменной $d не влечёт за собой изменение переменоой $s. То есть в самом простом виде надо писать не $d += 1, a
$d += 1
$s = $k[$d]
То есть надо обновлять значение переменной.
 

zlo-kazan

Скриптер
Сообщения
374
Репутация
100
Чуть подправил... и работает... :smile:

Код:
_e()
Func _e()
    global $k = StringSplit("1,2,3,4", ",")
	For $i=1 to $k[0]
	_s($i)
	Next
EndFunc

Func _s($d)
    MsgBox(0, "", $k[$d])
EndFunc
 
Автор
A

andreitrane

Новичок
Сообщения
141
Репутация
3
zlo-kazan
спасибо конечно, но я уже сказал что мне не надо чтобы в скрипте присутствовало "от" - "до", я бы сам так давно сделал
SyDr
спасибо, работает, но если $d превышало количество делений $k, то условие не срабатывало и вылетала ошибка что $k[$d] не существует, поэтому пришлось сделать так
Код:
Global $d = 1
	Global $k = StringSplit("1,2,3,4", ",")
		_e()

Func _e()
	_s()
	$d+= 1
	_s()
	$d += 1
	_s()
	$d+= 1
	_s()
	$d+= 1
	_s()
	$d+= 1
	_s()
	$d+= 1
	_s()
	$d += 1
	_s()
	$d+= 1
	_s()
	$d+= 1
	_s()
	$d+= 1
	EndFunc

Func _s()
	if $d > $k[0] Then
	Global $d = 1
	EndIf
	Global $s = $k[$d]
	MsgBox(0, "", $s)
	EndFunc
 

zlo-kazan

Скриптер
Сообщения
374
Репутация
100
:rofl: А если массив в 5000 ячеек? То также в ручную каждую строчку?

Не нужно от и до... :scratch: и запись больше напоминает бесконечный цикл...

Код:
Global $d
global $k = StringSplit("1,2,3,4,5", ",")
_e()
Func _e()
    While 1
	If $d>$k[0] then $d=1
	_s()
	$d+=1
	WEnd
EndFunc

Func _s()
    MsgBox(0, "", $k[$d])
EndFunc
 
Верх