简单的 while 与IF 结合 IF有问题 但我找不到问题 [已解决]
本帖最后由 大叔 于 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
WEnd2016/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 在 05 的时候,while 循环执行速度很快,执行了两次,取到的时间末尾一位一直是 5,所以打印两次(或多次)。 本帖最后由 大叔 于 2016-11-9 15:03 编辑
在 05 的时候,while 循环执行速度很快,执行了两次,取到的时间末尾一位一直是 5,所以打印两次(或多次) ...
nmgwddj 发表于 2016-11-9 14:56 http://www.autoitx.com/images/common/back.gif
在05第一次执行的时候 $a = 0 下次应该不满足If StringRight(@SEC, 1) = $a 这个条件才对. 本帖最后由 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
WEnd5秒的时候先运行了第一个if再运行了第二个if所以5秒会输出2次
这样不可以吗 本帖最后由 大叔 于 2016-11-9 17:07 编辑
回复 4# liuyilun
谢谢亲. 我换成Switch判断后问题解决了. 我只是想知道为什么会出现这样的结果5秒的时候不应该两个if都运行. 回复 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:11 编辑
回复 6# liuyilun
5秒时StringRight(@SEC, 1)=5$a = 5 运行第一个if, $a赋值是0 请看第一部分代码 第二部分是OK的.
5的时候 $a=0
0的时候 $a=5
加这个就是为了防止重复运行. 本帖最后由 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 帮你顶点{:face (131):} 回复 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 回复 8# afan
感谢A版
这弯我转过来了.
为5时会执行两次 是两个IF 都执行了
而不是其中一个IF执行了两次我理解错误
页:
[1]