卫和谐 发表于 2008-6-5 12:37:05

求两个以上变量进行判断的表达式!

如下:
If $maxresolution <> '' Then
                If $Width >= 1600 And $Height >= 1200 Then _ChangeScreenRes(1600, 1200)
                If 1440 <= $Width < 1600 And 1080 <= $Height < 1200 Then _ChangeScreenRes(1440, 1080)
                If 1280 <= $Width < 1440 And 1024 <= $Height < 1080 Then _ChangeScreenRes(1280, 1024)
                If 1024 <= $Width < 1280 And 768 <= $Height < 1024 Then _ChangeScreenRes(1024, 768)
                If 800 <= $Width < 1024 And 600 <= $Height < 768 Then _ChangeScreenRes(800, 600)
      Else
                RegDelete($MODES)
      EndIf
      $i = $i + 1
WEnd

[ 本帖最后由 卫和谐 于 2008-6-13 13:48 编辑 ]

netegg 发表于 2008-6-5 13:38:52

600<$WITH<800,800<$WITH<1000......,用IF...THEN...这种表达式不行,总是会返回600<$WITH<800!
Switch $with
   case 600 to 800
case 800 to 1000
endswtich
用if的话
if 600<$with < 800 then
Else
if 800<$with< 1000 then
endif
endif

jhwl 发表于 2008-6-5 14:41:39

;要求大于600而小于800时或大于800小于1000......,
Dim $x=801
If $x>600 And $x< 800 Or $x>800 And $x<1000 Then
MsgBox(0,"test","恭喜你!条件符合这是测试结果"&$x)
Else
MsgBox(0,"error","条件不符合!"&"你的变量值为"&$x)
EndIf
很简单...给你写好了,自己看着改吧!如果问题已解决请注明.

[ 本帖最后由 jhwl 于 2008-6-5 14:47 编辑 ]

卫和谐 发表于 2008-6-6 09:38:45

可能是我没有说明白,看下面代码:

   If $maxresolution <> '' Then
                If $Width >= 1600 And $Height >= 1200 Then _ChangeScreenRes(1600, 1200)
                If 1440 <= $Width < 1600 And 1080 <= $Height < 1200 Then _ChangeScreenRes(1440, 1080)
                If 1280 <= $Width < 1440 And 1024 <= $Height < 1080 Then _ChangeScreenRes(1280, 1024)
                If 1024 <= $Width < 1280 And 768 <= $Height < 1024 Then _ChangeScreenRes(1024, 768)
                If 800 <= $Width < 1024 And 600 <= $Height < 768 Then _ChangeScreenRes(800, 600)
      Else
                RegDelete($MODES)
      EndIf
      $i = $i + 1
WEnd

象这段代码,$Width 和$Height是读取的,结果老是运行 _ChangeScreenRes(800, 600)的?

[ 本帖最后由 卫和谐 于 2008-6-6 09:42 编辑 ]

llztt 发表于 2008-6-6 10:04:11

是你写法上的逻辑问题吧...

800 <= $Width < 1024
800<$width 返回真则为1 , 返回假则为0, 当然小于1024了....
所以必然成立的....

AU3的逻辑判断太不严谨了,我们为了代码的严谨更要注意这一点, 不要太刻意追求代码的简洁... 有时会隐藏很多错误的..有时代码多了点是值得的

关于范围判断, AU3帮助里推荐的是SWITCH

卫和谐 发表于 2008-6-7 14:34:00

能否写个样子参考下?

卫和谐 发表于 2008-6-9 10:04:48

昨天用SWITCH自己写了一下,不行,谁能演示下??

budgerigar 发表于 2008-6-9 11:31:17

用下面的不行吗,而且变量判断不要用800 <= $Width < 1024这样的,应该用$width>=800 and$Width < 1024,比较严谨,高级语言就不让那样用的,容易产生歧义
If <表达式> Then
    语句
    ...
[ElseIf 表达式-n Then
    ]
    ...
[Else
   
    ...
EndIf

netegg 发表于 2008-6-9 11:58:03

switch$i
    case 600 to 800
    case 800 t o1000   
难道不行?

[ 本帖最后由 netegg 于 2008-6-9 12:07 编辑 ]

netegg 发表于 2008-6-9 12:07:29

是不是要改分辨率,你把操作语句定义为子过程,可能可以吧

zhang0121 发表于 2008-6-9 12:32:45

switch Check($width,$height)
 case 10
  _ChangeScreenRes(1600, 1200)
 case 8
  _ChangeScreenRes(1440, 1080)
 case 6
  _ChangeScreenRes(1280, 1024)
 case 4
  _ChangeScreenRes(1024, 768)
 case 2
  _ChangeScreenRes(800, 600)
endswitch

func Check($I,$J)
 select
  case $I>=
   $I = 5
  case $I<=
   $I = 4
  case $I<=
   $I = 3
  case $I<=
   $I = 2
  case $I<=
   $I = 1
 EndSelect
 select
  case $J>=
   $J = 5
  case $J<=
   $J = 4
  case $J<=
   $J = 3
  case $J<=
   $J = 2
  case $J<=
   $J = 1
 EndSelect
 $Sum = $I + $J
 Return($Sum)
endfunc

卫和谐 发表于 2008-6-9 17:42:12

等回家试试楼上的方法!

llztt 发表于 2008-6-9 19:28:37

这些语法本来就不该被通过的,只是这AU3语法太不严谨了...真假 字符串 数字都能一并使用,有时很方便,但实际使用中又容易出逻辑错误,所以AU3也就是个弱脚本了
我现在受不了的毛病就是类似这样的 somefunc("someparam")后面不能直接加 来取返回的数组某索引值

卫和谐 发表于 2008-6-10 14:29:36

11楼的方法也试了,不好用,仍然和我最初的处理结果一样!?运行:
_ChangeScreenRes(800, 600)

卫和谐 发表于 2008-6-11 08:41:55

这个没人能够解决吗,高手帮下忙!
页: [1] 2
查看完整版本: 求两个以上变量进行判断的表达式!