[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[数值计算] [已解决]批处理if语句应用求解答

为什么两段代码运行结果会不一样
==============代码1================
  1. setlocal enabledelayedexpansion
  2. set /p a=输入整数大于0:
  3. set /p b=输入整数小于a:
  4. set /a c=a/b
  5. set /a d=a-c*b
  6. set /a m=0,n=1
  7. for /l %%i in ( 1 1 %a% ) do (
  8. echo %%i >>abc-!n!.txt
  9. set /a m=m+1
  10. if !n! leq %d% (
  11. if !m! geq %c%+1 (
  12. set m=0
  13. set /a n=n+1)
  14. ) else (
  15. if !m! geq %c% (set m=0
  16. if !n! lss %b% (set /a n=n+1)
  17. )
  18. )
  19. )
  20. pause
复制代码
==============代码2================
  1. setlocal enabledelayedexpansion
  2. set /p a=输入整数大于0:
  3. set /p b=输入整数小于a:
  4. set /a c=a/b
  5. set /a d=a-c*b
  6. set /a m=0,n=1
  7. for /l %%i in ( 1 1 %a% ) do (
  8. echo %%i >>abc-!n!.txt
  9. set /a m=m+1
  10. if !n! leq %d% (
  11. if !m! [color=Red]equ[/color] %c%+1 (
  12. set m=0
  13. set /a n=n+1)
  14. ) else (
  15. if !m! [color=Red]equ[/color] %c% (set m=0
  16. if !n! lss %b% (set /a n=n+1)
  17. )
  18. )
  19. )
  20. pause
复制代码
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

能否介绍一下代码是为了实现什么功能?
读一个错误的代码容易被带跑偏。

TOP

回复 2# GNU

比如a=10,b=3,就是将1,2,3,4,5,6,7,8,9,10分3份放入abc-1,abc-2,abc-3
实现
abc-1内容为
1
2
3
4
abc-2内容为
5
6
7
abc-3内容为
8
9
10

TOP

回复 3# zjpwang


if !m! equ %c%+1
if语句里面不支持算数运算,你这个条件永远不会成立。做个简单的试验就知道:
  1. @echo off
  2. set a=2
  3. set b=1
  4. if %a% equ %b%+1 (
  5.     echo yes
  6. ) else (
  7.     echo no
  8. )
  9. pause
复制代码
geq表示大于等于,equ表示等于。观察一下变量的值就知道equ在逻辑上无法实现你的想法:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /p a=输入整数大于0:
  4. set /p b=输入整数小于a:
  5. set /a c=a/b
  6. set /a d=a-c*b
  7. set /a m=0,n=1
  8. for /l %%i in ( 1 1 %a% ) do (
  9.     echo %%i >>abc-!n!.txt
  10.     set /a m=m+1
  11.     echo !m! --- %d% --- %c% --- !n!
  12.     if !n! leq %d% (
  13.         echo in if 1
  14.         if !m! equ %c%+1 (
  15.             echo in if 2
  16.             set m=0
  17.             set /a n=n+1
  18.         )
  19.     ) else (
  20.         echo in else
  21.         if !m! equ %c% (
  22.             set m=0
  23.             if !n! lss %b% (set /a n=n+1)
  24.         )
  25.     )
  26. )
  27. paues
复制代码
1

评分人数

TOP

回复 4# GNU

多谢大神,结果对了程序不一定对

TOP

返回列表