![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-10 15:19 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,255 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 帮忙看看我这段代码--判断闰年,哪里有问题? |
| 可打印版本 3,280 / 16 |
| 第1楼 hhl | 发表于 2006-11-01 22:12 |
| 初级用户 发帖 14 积分 35 | |
|
帮忙看看我这段代码--判断闰年,哪里有问题? set UDAY=0
for /L %%i in (1971,1,%YEAR%) do ( set /a temp1="%%i%%4" ::除4取余数 set /a temp2="%%i%%100" ::除100取余数 set /a temp3="%%i%%400" ::除400取余数 if %temp1%==0 if not %temp2%==0 set /a UDAY="%UDAY%+366"&set TAG=r else if %temp3%==0 set /a UDAY="%UDAY%+366"&set TAG=r else set /a UDAY="%UDAY%+365"&set TAG=p) ::代码是判断是否闰年并累加天数 好像 tempx那里不计算,百思不得其解,大虾们,指点一下迷津,多谢多谢! [ Last edited by hhl on 2006-11-1 at 10:32 PM ] |
|
| 第2楼 hhl | 发表于 2006-11-01 22:25 |
| 初级用户 发帖 14 积分 35 | |
|
上面的算法有问题,调整一下:
set UDAY=0 for /L %%i in (1971,1,%YEAR%) do ( set /a temp1="%%i%%4" ::除4取余数 set /a temp2="%%i%%100" ::除100取余数 set /a temp3="%%i%%400" ::除400取余数 if %temp1%==0 ( if not %temp2%==0 set /a UDAY="%UDAY%+366"&set TAG=r else if %temp3%==0 set /a UDAY="%UDAY%+366"&set TAG=r else set /a UDAY="%UDAY%+365"&set TAG=p) else set /a UDAY="%UDAY%+365"&set TAG=p ) ::算法,抄C语言书上的,能被4整除,但不能被100整除的是闰年;能被400整除的也是闰年 帮帮看看tempx那里用set /a计算有什么问题? [ Last edited by hhl on 2006-11-1 at 10:30 PM ] |
|
| 第3楼 不得不爱 | 发表于 2006-11-01 22:36 |
| 超级版主 发帖 2,044 积分 5,310 来自 四川南充 | |
|
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION set UDAY=0 for /L %%i in (1971,1,%YEAR%) do ( set/a temp1=%%i%%4 set/a temp2=%%i%%100 set/a temp3=%%i%%400 echo !temp1! !UDAY! if !temp1!==0 if not !temp2!==0 (set /a UDAY=!UDAY!+366&set TAG=r) else (if !temp3!==0 (set /a UDAY=!UDAY!+366&set TAG=r) else (set /a UDAY=!UDAY!+365&set TAG=p))) |
|
| 第4楼 hhl | 发表于 2006-11-01 22:40 |
| 初级用户 发帖 14 积分 35 | |
|
请教超版:
SETLOCAL ENABLEDELAYEDEXPANSION 什么意思? echo !temp1! !UDAY! 这句又是什么意思? 为什么tempx,UDAY变量要用!!包起来? |
|
| 第5楼 NaturalJ0 | 发表于 2006-11-01 22:44 |
| 银牌会员 发帖 533 积分 1,181 | |
|
加上括号。
|
|
| 第6楼 NaturalJ0 | 发表于 2006-11-01 22:45 |
| 银牌会员 发帖 533 积分 1,181 | |
|
在论坛搜下“变量延迟”。
|
|
| 第7楼 不得不爱 | 发表于 2006-11-01 22:56 |
| 超级版主 发帖 2,044 积分 5,310 来自 四川南充 | |
Originally posted by hhl at 2006-11-1 22:40: echo !temp1! !UDAY! 这句是调试用的 你在命令行下输入: for/? 就知道为什么tempx,UDAY变量要用!!包起来了 不过你的代码还有点问题,再改下: [ Last edited by 不得不爱 on 2006-11-1 at 10:57 PM ] |
|
| 第8楼 namejm | 发表于 2006-11-01 23:04 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
Originally posted by hhl at 2006-11-1 22:25: 在我的印象中,只要能被4整除的年份都是闰年,怎么C里的算法竟然如此复杂、并且似乎有点不合闰年的定义呢? |
|
| 第9楼 hhl | 发表于 2006-11-01 23:09 |
| 初级用户 发帖 14 积分 35 | |
|
谢谢,楼上各位,非常感谢。呵呵,我是CMD新手,很多语法,运算符都不清楚。
|
|
| 第10楼 hhl | 发表于 2006-11-01 23:10 |
| 初级用户 发帖 14 积分 35 | |
|
呵呵,namejm版主,请参考谭浩强的那本经典的C.
|
|
| 第11楼 不得不爱 | 发表于 2006-11-01 23:18 |
| 超级版主 发帖 2,044 积分 5,310 来自 四川南充 | |
Originally posted by namejm at 2006-11-1 23:04: 你没有学过历法吗? 4年1润 100年少1润 400年多1润 原因是每年是365.2422天 |
|
| 第12楼 namejm | 发表于 2006-11-01 23:28 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
呵呵,对历法了解不多,闰年的概念甚至来自于小学时的数学课本,各位见笑了。
|
|
| 第13楼 youxi01 | 发表于 2006-11-02 00:45 |
| 高级用户 发帖 247 积分 846 来自 湖南==》广东 | |
|
哈哈,我原来也不知道哦,也知道被4整除的才是闰年,现在知道了,感谢啊!
|
|
| 第14楼 pengfei | 发表于 2006-11-02 03:53 |
| 银牌会员 发帖 485 积分 1,218 来自 湖南.娄底 | |
|
判断是否为闰年条件是:
1. 能被4整除, 但不能被100整除. 2. 能被100整除, 又能被400整除. C语言真的好强, 而判断是否闰年最简单的是逻辑运算来完成了, 遗憾的是批处理中并没有这样的运算类型. 我想是不是可以通过更复杂的CMD代码来模拟逻辑运算. [ Last edited by pengfei on 2006-11-2 at 04:26 AM ] |
|
| 第15楼 不得不爱 | 发表于 2006-11-02 04:41 |
| 超级版主 发帖 2,044 积分 5,310 来自 四川南充 | |
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |