找回密码
 加入
搜索
查看: 1806|回复: 7

[AU3基础] 请教如何完成以下流程的逻辑设计?

[复制链接]
发表于 2021-3-13 19:28:58 | 显示全部楼层 |阅读模式
我想通过Au3来完成以下流程模块的运行,因Au3取消了Goto语句(如果有Goto就简单了),感觉用循环完成这个逻辑运行流程有些困难,请教高人!
流程图见附件,每个方块代表一个子模块。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2021-3-13 20:34:39 | 显示全部楼层
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
发表于 2021-3-13 19:39:14 | 显示全部楼层
本帖最后由 junyee 于 2021-3-14 09:41 编辑

你用 while + break 试试.

---
补充说明,不是 break, AU3中的 break操作 是 exitloop.


发表于 2021-3-13 19:46:17 | 显示全部楼层
这意思?
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
发表于 2021-3-13 19:54:44 | 显示全部楼层
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
发表于 2021-3-13 20:02:24 | 显示全部楼层
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
 楼主| 发表于 2021-3-13 20:29:27 | 显示全部楼层
谢谢两位老师耐心解答,可能我还是没太表达清楚。ABCD...这些都是独立功能的模块(有的有函数参数和返回值),相互间不明确嵌套执行哪个模块,比如A模块中是不能增加执行B模块的代码的,因此实际是单独要有个负责流程的模块作为顶层执行的,这个模块负责按流程的逻辑顺序控制ABCD等个模块的先后执行。
 楼主| 发表于 2021-3-13 20:48:13 | 显示全部楼层
afan 发表于 2021-3-13 20:34
这样不就没嵌套,全都独立了

就是这个意思,谢谢!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-4-19 09:01 , Processed in 0.081699 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表