找回密码
 加入
搜索
查看: 1912|回复: 10

[AU3基础] 简单的 while 与IF 结合 IF有问题 但我找不到问题 [已解决]

  [复制链接]
发表于 2016-11-9 14:42:31 | 显示全部楼层 |阅读模式
本帖最后由 大叔 于 2017-1-19 23:42 编辑

先上代码  这是第一部分代码  有问题的
#include <Date.au3>
$a = 0
While 1
        Sleep(200)
        If StringRight(@SEC, 1) = $a Then  ;;0
                $a = 5
                FileWriteLine("321.txt", _NowCalc())
        EndIf
        If StringRight(@SEC, 1) = $a Then  ;;5
                $a = 0
                FileWriteLine("321.txt", _NowCalc())
        EndIf
WEnd
我想当前时间秒数个位为5或0时执行一个动作一次  
但上面的代码跑出来的结果是下面这样的
2016/11/09 14:00:20
2016/11/09 14:00:25
2016/11/09 14:00:25
2016/11/09 14:00:30
2016/11/09 14:00:35
2016/11/09 14:00:35
2016/11/09 14:00:40
2016/11/09 14:00:45
2016/11/09 14:00:45
2016/11/09 14:00:50
2016/11/09 14:00:55
2016/11/09 14:00:55
2016/11/09 14:01:00
很明显 5秒的时候多执行了一次.  
我折腾一下午找不出原因. AUTOIT 3.3.6.1
换成Switch判断秒数就是正常的
难道我又犯了幼稚的错误?
这是第二部分代码  没有问题OK的
#include <Date.au3>
$a = 0
While 1
        Sleep(200)
        Switch StringRight(@SEC, 1)
                Case 5
                        If $a = 0 Then
                                $a = 5
                                FileWriteLine("321.txt", _NowCalc())
                        EndIf
                Case 0
                        If $a = 5 Then
                                $a = 0
                                FileWriteLine("321.txt", _NowCalc())
                        EndIf
        EndSwitch
WEnd
2016/11/09 14:21:00
2016/11/09 14:21:05
2016/11/09 14:21:10
2016/11/09 14:21:15
2016/11/09 14:21:20
2016/11/09 14:21:25
2016/11/09 14:21:30
2016/11/09 14:21:35
2016/11/09 14:21:40
2016/11/09 14:21:45
2016/11/09 14:21:50
2016/11/09 14:21:55
2016/11/09 14:22:00
2016/11/09 14:22:05
2016/11/09 14:22:10
2016/11/09 14:22:15
2016/11/09 14:22:20
发表于 2016-11-9 14:56:12 | 显示全部楼层
在 05 的时候,while 循环执行速度很快,执行了两次,取到的时间末尾一位一直是 5,所以打印两次(或多次)。
 楼主| 发表于 2016-11-9 15:01:43 | 显示全部楼层
本帖最后由 大叔 于 2016-11-9 15:03 编辑
在 05 的时候,while 循环执行速度很快,执行了两次,取到的时间末尾一位一直是 5,所以打印两次(或多次) ...
nmgwddj 发表于 2016-11-9 14:56



    在05第一次执行的时候 $a = 0 下次应该不满足If StringRight(@SEC, 1) = $a 这个条件才对.
发表于 2016-11-9 15:33:53 | 显示全部楼层
本帖最后由 liuyilun 于 2016-11-9 16:03 编辑
#include <Date.au3>
While 1
        Sleep(1000)
        If StringRight(@SEC, 1) = 0 Then  ;;0
                FileWriteLine("321.txt", _NowCalc())
        ElseIf StringRight(@SEC, 1) = 5 Then  ;;5
                FileWriteLine("321.txt", _NowCalc())
        EndIf
WEnd
5秒的时候先运行了第一个if再运行了第二个if所以5秒会输出2次
这样不可以吗
 楼主| 发表于 2016-11-9 17:02:41 | 显示全部楼层
本帖最后由 大叔 于 2016-11-9 17:07 编辑

回复 4# liuyilun


谢谢亲. 我换成Switch判断后问题解决了. 我只是想知道为什么会出现这样的结果  5秒的时候不应该两个if都运行.
发表于 2016-11-9 17:39:20 | 显示全部楼层
回复 5# 大叔

0秒时给 $a赋值5
5秒时StringRight(@SEC, 1)=5  $a = 5 运行第一个if, $a赋值5
然后StringRight(@SEC, 1)=5  $a = 5运行第二个if
 楼主| 发表于 2016-11-9 18:07:11 | 显示全部楼层
本帖最后由 大叔 于 2016-11-9 18:11 编辑

回复 6# liuyilun

5秒时StringRight(@SEC, 1)=5  $a = 5 运行第一个if, $a赋值是0   请看第一部分代码   第二部分是OK的.

5的时候 $a=0  
0的时候 $a=5
加这个就是为了防止重复运行.
发表于 2016-11-9 19:40:31 | 显示全部楼层
本帖最后由 afan 于 2016-11-9 20:19 编辑

$a 为 0 时执行一次;而$a 为 5 时会执行两次,代入便知~
也可以如下
#include <Date.au3>
Local $a, $b
While 1
        Sleep(200)
        $a = StringRight(@SEC, 1)
        If ($a = 0 Or $a = 5) Then
                If $b = 0 Then
                        FileWriteLine("321.txt", _NowCalc())
                        $b = 1
                Endif
        Else
                $b = 0
        EndIf
WEnd
发表于 2016-11-9 20:50:41 | 显示全部楼层
帮你顶点
 楼主| 发表于 2016-11-10 10:04:19 | 显示全部楼层
回复 6# liuyilun


感谢亲.  是我的理解有问题,   果然是我犯了幼稚的错误
你说的没错  当秒数个位等于5的时候两个IF 都执行了
我错误以为  是5的那个IF 执行了两次
我修改了代码  才发现问题. 再次感谢
#include <Date.au3>
$a = 0
While 1
        Sleep(200)
        If StringRight(@SEC, 1) = $a Then  ;;0
                $a = 5
                FileWriteLine("321.txt", _NowCalc()&"  0")
        EndIf
        If StringRight(@SEC, 1) = $a Then  ;;5
                $a = 0
                FileWriteLine("321.txt", _NowCalc()&"  5")
        EndIf
WEnd
 楼主| 发表于 2016-11-10 10:07:38 | 显示全部楼层
回复 8# afan


    感谢A版
这弯我转过来了.  
为5时会执行两次   是两个IF 都执行了  
而不是其中一个IF执行了两次  我理解错误
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-4-25 23:36 , Processed in 0.085739 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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