答案在8楼- @echo off
- set N=0123
- set /a N=%N%*1
- echo %N%
复制代码 结果是83
为什么会这样?
我想将一个四位数变成四个数字,代码如下。只要首数字不为0,结果都正确。但是如果输入0123(允许这样输),结果却是0 0 8 3- @echo off&setlocal enabledelayedexpansion
- set /p Num=请连续输入四个不同的数字(比如0123):
- set /a N1=!Num!/1000
-
- set /a Num=!Num!-!N1!*1000
- set /a N2=!Num!/100
-
- set /a Num=!Num!-!N2!*100
- set /a N3=!Num!/10
-
- set /a N4=!Num!-!N3!*10
- echo !N1! !N2! !N3! !N4!
复制代码 好吧,既然set中,0开头的表示8进制,我绕着走好了。- @echo off&setlocal enabledelayedexpansion
- set /p Num=请连续输入四个不同的数字(比如0123):
- set /a N1=!Num!/1000
- if !N1!==0 goto R8
- set /a Num=!Num!-!N1!*1000
- set /a N2=!Num!/100
- set /a Num=!Num!-!N2!*100
- set /a N3=!Num!/10
- set /a N4=!Num!-!N3!*10
- goto N4
-
- :R8
- echo A!Num!>ls.tmp
- for /f "tokens=2 delims=0" %%a in (ls.tmp) do set Num=%%a
- del /a /f ls.tmp
- set /a N2=!Num!/100
- set /a Num=!Num!-!N2!*100
- set /a N3=!Num!/10
- set /a N4=!Num!-!N3!*10
-
- :N4
- echo !N1! !N2! !N3! !N4!
复制代码 新问题发现了。如果有8 和9 还是会报错。
下面这段代码错在哪里了?假设M1到M4 N1到N4全都有值了。目的是找出相同数字的个数。- @echo off&setlocal enabledelayedexpansion
- set b=0
- for %%a in (!M1!,!M2!,!M3!,!M4!) do (
- for %%a in (!N1!,!N2!,!N3!,!N4!) do (if %%a==%%b
- set /a b+=1 )
- )
复制代码 我对上述代码的理解是:将M1的值值赋给%%a,执行第二个for,分别将N1-N4的值赋给%%b,每赋一次值就和%%a比较一次。
这种理解错在哪里了? |