找回密码
 加入
搜索
查看: 7611|回复: 22

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

[复制链接]
发表于 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 编辑 ]
发表于 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
发表于 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 编辑 ]
发表于 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自己写了一下,不行,谁能演示下??
发表于 2008-6-9 11:31:17 | 显示全部楼层
用下面的不行吗,而且变量判断不要用800 <= $Width < 1024这样的,应该用$width>=800 and  $Width < 1024,比较严谨,高级语言就不让那样用的,容易产生歧义
If <表达式> Then
    语句
    ...
[ElseIf 表达式-n Then
    [elseif 语句 ... ]]
    ...
[Else
    [else 语句]
    ...
EndIf
发表于 2008-6-9 11:58:03 | 显示全部楼层
switch  $i
    case 600 to 800
    case 800 t o1000   
难道不行?

[ 本帖最后由 netegg 于 2008-6-9 12:07 编辑 ]
发表于 2008-6-9 12:07:29 | 显示全部楼层
是不是要改分辨率,你把操作语句定义为子过程,可能可以吧
发表于 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 | 显示全部楼层
等回家试试楼上的方法!
发表于 2008-6-9 19:28:37 | 显示全部楼层
这些语法本来就不该被通过的,  只是这AU3语法太不严谨了...真假 字符串 数字都能一并使用,有时很方便,但实际使用中又容易出逻辑错误,  所以AU3也就是个弱脚本了
我现在受不了的毛病就是类似这样的 somefunc("someparam")后面不能直接加[index] 来取返回的数组某索引值
 楼主| 发表于 2008-6-10 14:29:36 | 显示全部楼层
11楼的方法也试了,不好用,仍然和我最初的处理结果一样!?运行:
_ChangeScreenRes(800, 600)
 楼主| 发表于 2008-6-11 08:41:55 | 显示全部楼层
这个没人能够解决吗,高手帮下忙!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-4-25 21:16 , Processed in 0.078316 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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