请教如何完成以下流程的逻辑设计?
我想通过Au3来完成以下流程模块的运行,因Au3取消了Goto语句(如果有Goto就简单了),感觉用循环完成这个逻辑运行流程有些困难,请教高人!流程图见附件,每个方块代表一个子模块。
huangh 发表于 2021-3-13 20:29
谢谢两位老师耐心解答,可能我还是没太表达清楚。ABCD...这些都是独立功能的模块(有的有函数参数和返回值) ...
这样不就没嵌套,全都独立了
Do
_FuncA()
If _FuncB() > 100 Then
_FuncC()
Else
_FuncE()
_FuncF()
EndIf
_FuncD()
If Not _FuncG() Then ExitLoop
Until 0
Exit
Func _FuncA()
EndFunc ;==>_FuncA
Func _FuncB()
Return Random(1, 200, 1)
EndFunc ;==>_FuncB
Func _FuncC()
EndFunc ;==>_FuncC
Func _FuncE()
EndFunc ;==>_FuncE
Func _FuncF()
EndFunc ;==>_FuncF
Func _FuncD()
EndFunc ;==>_FuncD
Func _FuncG()
Return Random(1, 0, 1)
EndFunc ;==>_FuncG 本帖最后由 junyee 于 2021-3-14 09:41 编辑
你用 while + break 试试.
---
补充说明,不是 break, AU3中的 break操作 是 exitloop.
这意思?
Do
_FuncA()
If Not _FuncG() Then ExitLoop
Until 0
Exit
Func _FuncA()
If _FuncB() > 100 Then
_FuncC()
Else
_FuncE()
_FuncF()
EndIf
_FuncD()
EndFunc ;==>_FuncA
Func _FuncB()
Return Random(1, 200, 1)
EndFunc ;==>_FuncB
Func _FuncC()
EndFunc ;==>_FuncC
Func _FuncE()
EndFunc ;==>_FuncE
Func _FuncF()
EndFunc ;==>_FuncF
Func _FuncD()
EndFunc ;==>_FuncD
Func _FuncG()
Return Random(1, 0, 1)
EndFunc ;==>_FuncG
Global $ii = 1
;此方法有 递归级别 限制
A()
Exit
Func A()
_CW("进入A")
Local $v = B()
If $v > 100 Then
E()
Else
C()
EndIf
EndFunc ;==>A
Func B()
Local $vvv = 1 ; V1>100 的那个测试值
_CW("进入B"&@TAB&"值是:"&$vvv)
Return $vvv
EndFunc ;==>B
Func C()
_CW("进入C")
D()
EndFunc ;==>C
Func D()
_CW("进入D")
Local $v = G()
If $v = True Then
$ii +=1 ;计次用
Sleep(100)
_CW("-----继续"&$ii&"循环------")
A()
Else
_CW("退出程序"&@crlf)
Exit
EndIf
EndFunc ;==>D
Func E()
_CW("进入E")
F()
EndFunc ;==>E
Func F()
_CW("进入F")
D()
EndFunc ;==>F
Func G()
Local $vvv = True ;V2=True 那个测试值 。注意为 False
_CW("进入G"&@TAB&"值是: "&$vvv)
Return $vvv
EndFunc ;==>G
Func _CW($str)
ConsoleWrite(@CRLF)
ConsoleWrite($str)
EndFunc ;==>_CW
Global $ii = 1
;可一直循环
Do
A()
Until 0
Exit
Func A()
_CW("进入A")
Local $v = B()
If $v > 100 Then
E()
Else
C()
EndIf
EndFunc ;==>A
Func B()
Local $vvv = 1 ; V1>100 的那个测试值
_CW("进入B"&@TAB&"值是:"&$vvv)
Return $vvv
EndFunc ;==>B
Func C()
_CW("进入C")
Return D()
EndFunc ;==>C
Func D()
_CW("进入D")
Local $v = G()
If $v = True Then
$ii +=1 ;计次用
Sleep(100)
_CW("-----继续"&$ii&"循环------")
;~ A()
Else
_CW("退出程序"&@crlf)
Exit
EndIf
EndFunc ;==>D
Func E()
_CW("进入E")
F()
EndFunc ;==>E
Func F()
_CW("进入F")
D()
EndFunc ;==>F
Func G()
Local $vvv = True ;V2=True 那个测试值 。注意为 False
;~ Local $vvv = False ;V2=True 那个测试值 。注意为 False
_CW("进入G"&@TAB&"值是: "&$vvv)
Return $vvv
EndFunc ;==>G
Func _CW($str)
ConsoleWrite(@CRLF)
ConsoleWrite($str)
EndFunc ;==>_CW
谢谢两位老师耐心解答,可能我还是没太表达清楚。ABCD...这些都是独立功能的模块(有的有函数参数和返回值),相互间不明确嵌套执行哪个模块,比如A模块中是不能增加执行B模块的代码的,因此实际是单独要有个负责流程的模块作为顶层执行的,这个模块负责按流程的逻辑顺序控制ABCD等个模块的先后执行。 afan 发表于 2021-3-13 20:34
这样不就没嵌套,全都独立了
就是这个意思,谢谢!
页:
[1]