|  | 
 
| bat-zw 金牌会员
 
       永远的学习者
 
 
 积分 3105
 发帖 1276
 注册 2008-3-8
 状态 离线
 | 
| 『楼 主』:
 奥运倒计时,请大家帮助完善!!!
 
使用 LLM 解释/回答一下 
 
 
在此声明我不是在刻意标榜,而是以一个自豪的中国人身份写下了这段代码: 
----------------------------------- 
在此严重感谢zh159兄多次测试并指出bug。 
----------------------------------- 
于2008年4月18日再次更新,加入毫秒倒计时。
 @echo off&color ac&mode con cols=50 lines=10title 奥运倒计时--made by zw19750516(cn-dos)
 echo.&echo.&echo.
 echo     我们每一个中国人都在期盼这一自豪时刻的到来!
 echo.
 for /l %%i in (1,1,100) do call,set cls=%%cls%%
 goto one
 :two
 set n=2&set var=08-07&goto begin
 <img src="images/smilies/face-surprise.png" align="absmiddle" border="0">ne
 set n=1&set var=%date:~5,-4%
 :begin
 set month=%var:~1,1%&set number=29
 set /a month-=1
 for /l %%i in (1,1,%month%) do call :lp %%i
 set /a number+=100%var:~3,2%%%100
 set str=%str% %number%
 if not %n% equ 2 goto two
 for /f "tokens=1,2" %%i in ("%str%"<img src="images/smilies/face-wink.png" align="absmiddle" border="0"> do set /a day=%%j-%%i
 set /a hm=100-1000%time:~9,2%%%1000,m=60-100%time:~6,2%%%100,f=60-100%time:~3,2%%%100,s=43-%time:~,2%
 if %hm% equ 100 set /a hm-=100,m+=1
 if %m% equ 60 set /a m-=60,f+=1
 if %f% equ 60 set /a f-=60,h+=1
 if %s% geq 24 set /a s-=24,day+=1
 set /p=    离北京奥运开幕还有%day%天%s%小时%f%分%m%秒%hm%毫秒<nul
 set /p=%cls%<nul
 set n=0&set number=0
 goto begin
 :lp
 for %%i in (1,3,5,7,8,10) do if %%i equ %1 set /a number+=31
 for %%i in (4,6,9,11) do if %%i equ %1 set /a number+=30
 
 Last edited by zw19750516 on 2008-4-19 at 09:13 PM ]
 
 
 
 
 |  
                  |  批处理之家新域名:www.bathome.net
 |  | 
|  2008-4-16 21:14 |  | 
|  | 
 
| zh159 金牌会员
 
       
 
 
 积分 3687
 发帖 1467
 注册 2005-8-8
 状态 离线
 | 
| 『第 2 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
出现有的bug1、60秒(现在离北京奥运开幕还有113天23小时43分60秒)
 2、无效数字。数字常数只能是十进制(17),十六位进制(0x11)或八进制(021)。(大概是在52、51秒的时候)
 
 颜色改为4c可能好些
 
 Last edited by zh159 on 2008-4-16 at 09:26 PM ]
 
 
 
 
 
 |  
                  |  
  |  | 
|  2008-4-16 21:23 |  | 
|  | 
 
| bat-zw 金牌会员
 
       永远的学习者
 
 
 积分 3105
 发帖 1276
 注册 2008-3-8
 状态 离线
 |  | 
|  2008-4-16 21:26 |  | 
|  | 
 
| zh159 金牌会员
 
       
 
 
 积分 3687
 发帖 1467
 注册 2005-8-8
 状态 离线
 | 
| 『第 4 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
60秒还没解决新的问题:
 不能显示52、51秒,53秒在3秒后直接跳到50秒
 
 PS:还剩129天???
 
 
 
 
 
 |  
                  |  
  |  | 
|  2008-4-16 21:32 |  | 
|  | 
 
| bat-zw 金牌会员
 
       永远的学习者
 
 
 积分 3105
 发帖 1276
 注册 2008-3-8
 状态 离线
 | 
| 『第 5 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
Originally posted by zh159 at 2008-4-16 21:32:60秒还没解决
 新的问题:
 不能显示52、51秒,53秒在3秒后直接跳到50秒
 
 PS:还剩129天???
 
谢谢楼上60秒60分是我大意了,己解决,但53、52、51的问题不知从何入手!!!
 
 Last edited by zw19750516 on 2008-4-16 at 09:49 PM ] 
 
 
 
 
 |  
                  |  批处理之家新域名:www.bathome.net
 |  | 
|  2008-4-16 21:37 |  | 
|  | 
 
| afeichai 初级用户
 
   
 
 
 积分 171
 发帖 78
 注册 2006-11-22
 状态 离线
 |  | 
|  2008-4-16 21:52 |  | 
|  | 
 
| afeichai 初级用户
 
   
 
 
 积分 171
 发帖 78
 注册 2006-11-22
 状态 离线
 |  | 
|  2008-4-16 21:54 |  | 
|  | 
 
| zh159 金牌会员
 
       
 
 
 积分 3687
 发帖 1467
 注册 2005-8-8
 状态 离线
 | 
| 『第 8 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
53、52、51的问题是你不能直接拿08,09进行计算,set/a会认为是8进制而计算错误(会提示“无效数字。数字常数只能是十进制(17),十六位进制(0x11)或八进制(021)。”,只是闪的太快,不容易发现),所以01-09最好先去掉前面的0 
 
 
 
 
 |  
                  |  
  |  | 
|  2008-4-16 22:05 |  | 
|  | 
 
| bat-zw 金牌会员
 
       永远的学习者
 
 
 积分 3105
 发帖 1276
 注册 2008-3-8
 状态 离线
 |  | 
|  2008-4-16 22:17 |  | 
|  | 
 
| 26933062 银牌会员
 
      
 
 
 
 积分 2268
 发帖 879
 注册 2006-12-19
 状态 离线
 | 
| 『第 10 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
当小时为 0 点时,代码无法正确运行,另:使用cls 给人一种很不舒服的跳动感,建议用退格键来完成。
 
 
 
 
 
 |  
                  |  致精致简!
 |  | 
|  2008-4-17 00:15 |  | 
|  | 
 
| 26933062 银牌会员
 
      
 
 
 
 积分 2268
 发帖 879
 注册 2006-12-19
 状态 离线
 | 
| 『第 11 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
粗略作了一个,不知道计算方面有没有错误。 
: @echo off&color ac&mode con cols=50 lines=10
 for /l %%a in (1 1 100) do call set "t=%%t%%"
 for /f "tokens=1-3 delims=./- " %%a in ("%date%") do (
 set /a sy=%%a,sm=100%%b%%100,sd=100%%c%%100
 )
 for /l %%i in (%sm% 1 8) do call :loop %%i
 set /a mt-=sd
 for /f "tokens=1-3 delims=.: " %%a in ("%time%") do (
 set /a ss=20-100%%a%%100-1,ff=60-100%%b%%100,mm=60-100%%c%%100
 )
 echo.&echo.
 echo     我们每个中国人都在期盼这一自豪时刻的到来!
 echo.&echo.
 set var=%time:~7,1%
 :lis
 if %mm% equ 0 set /a ff-=1,mm=59
 if %ff% equ 0 set /a ss-=1,ff=59
 if %ss% lss 0 set /a ss=%ss:~-1%,mt-=1
 if %ss% equ 0 set /a ss=23,mt-=1
 set /p=  现在离北京奥运开幕还有%mt%天%ss%小时%ff%分%mm:~-2%秒%time:~9%毫秒<nul
 set /p=%t%<nul
 set num=%time:~7,1%
 if %var% neq %num% (set/a mm-=1&set var=%time:~7,1%)
 goto lis
 :loop
 for /f "tokens=%~1" %%a in ("31 29 31 30 31 30 31 8") do set /a mt+=%%a
 goto :eof
 
 
 
 
 
 |  
                  |  致精致简!
 |  | 
|  2008-4-17 02:05 |  | 
|  | 
 
| bat-zw 金牌会员
 
       永远的学习者
 
 
 积分 3105
 发帖 1276
 注册 2008-3-8
 状态 离线
 |  | 
|  2008-4-17 09:31 |  | 
|  | 
 
| bat-zw 金牌会员
 
       永远的学习者
 
 
 积分 3105
 发帖 1276
 注册 2008-3-8
 状态 离线
 | 
| 『第 13 楼』:
 排版还有点问题:
 
使用 LLM 解释/回答一下 
 
 
稍做修改: @echo off&color ac&mode con cols=50 lines=10title 奥运倒计时
 for /l %%a in (1 1 100) do call set "t=%%t%%"
 for /f "tokens=1-3 delims=./- " %%a in ("%date%") do (
 set /a sy=%%a,sm=100%%b%%100,sd=100%%c%%100
 )
 for /l %%i in (%sm% 1 8) do call :loop %%i
 set /a mt-=sd
 for /f "tokens=1-3 delims=.: " %%a in ("%time%") do (
 set /a ss=20-100%%a%%100-1,ff=60-100%%b%%100,mm=60-100%%c%%100
 )
 echo.&echo.
 echo     我们每个中国人都在期盼着这一自豪时刻的到来!
 echo.&echo.&echo.
 set var=%time:~7,1%
 :lis
 if %mm% equ 0 set /a ff-=1,mm=59
 if %ff% equ 0 set /a ss-=1,ff=59
 if %ss% lss 0 set /a ss=%ss:~-1%,mt-=1
 if %ss% equ 0 set /a ss=23,mt-=1
 set /p=   离北京奥运开幕还有%mt%天%ss%小时%ff%分%mm:~-2%秒%time:~9%毫秒<nul
 set /p=%t%<nul
 set num=%time:~7,1%
 if %var% neq %num% (set/a mm-=1&set var=%time:~7,1%)
 goto lis
 :loop
 for /f "tokens=%~1" %%a in ("31 29 31 30 31 30 31 8") do set /a mt+=%%a
 goto :eof
 
 
 
 
 |  
                  |  批处理之家新域名:www.bathome.net
 |  | 
|  2008-4-17 09:58 |  | 
|  | 
 
| qzwqzw 银牌会员
 
      天的白色影子
 
 
 积分 2343
 发帖 636
 注册 2004-3-6
 状态 离线
 | 
| 『第 14 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
代码有点偷懒 
最末尾的100分之一秒是在正计时 
而非倒计时
 
当然 
想精确的计算100分之一秒剩余稍微有些困难 
因为这段时间内能进行的计算是有限的 
如果代码性能太低 
等计算出剩余值都指不定过了多少个100分之一秒
 
另外这也与代码的优化执行策略有关 
比如以下这段代码
 @echo off
 set count=0
 set b=0
 :loop
 set last=%b%
 set b=1%time:~9,2%
 set /a r=200-b
 set /p=%r% <nul
 set /a count+=1
 if %count% lss 1000 goto loop
 pause
 
 
 
 
 |  | 
|  2008-4-18 09:30 |  | 
|  | 
 
| 26933062 银牌会员
 
      
 
 
 
 积分 2268
 发帖 879
 注册 2006-12-19
 状态 离线
 | 
| 『第 15 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
有道理,好像这样可以显示毫秒的倒计时,不过也看不出来。呵呵。。 
: @echo off
 set n=101
 for /l %%a in (1 1 100) do (
 set /a n-=1
 call set _%%a=%%n%%
 )
 :loop
 set b=%time:~9%
 call set /p=%%_%b%%%<nul
 set /p=<nul
 set /a count+=1
 if %count% lss 1000 goto loop
 pause
 
 
 Last edited by 26933062 on 2008-4-18 at 10:25 AM ]
 
 
 
 
 |  
                  |  致精致简!
 |  | 
|  2008-4-18 10:22 |  |