标题: [已解决]批处理set语句/a参数使用计算错误 [打印本页]
作者: er8852973 时间: 2011-8-12 10:45 标题: [已解决]批处理set语句/a参数使用计算错误
- set /p t=
- set /a s=t+1
- echo %s%
- pause>nul
复制代码
请问输入9时结果是10 但输入09时怎么结果是1啊 ?
作者: CrLf 时间: 2011-8-12 11:07
以 0 开头的字符串被当成八进制数字,0x 开头的则被当成十六进制,八进制可用字符为 0~7,十六进制可用字符为 0~f,所以 09 是非法数字,包含非法字符的算式在 set /a 中无法执行,所以 s 没有附新值,s=1 只能说明执行 set /a 之前 s 的值就已经是 1 了
作者: er8852973 时间: 2011-8-12 11:18
哦 这样啊 学习到了 谢谢
作者: 风之语故乡 时间: 2011-8-12 11:18
以 0 开头的字符串被当成八进制数字,0x 开头的则被当成十六进制,八进制可用字符为 0~7,十六进制可用字符 ...
CrLf 发表于 2011-8-12 11:07
没错,09会被当做无效的数字八进制数来处理,
但是,貌似也不是说s=1.楼主的代码有个错误,就是 set /a s=%t% +1 才对。
至于s的结果,恰是set /a s=t +1 得到的,这里的t字母,换成其他任何字符串结果都一样。
深层次的原理,待高手解释。
作者: CrLf 时间: 2011-8-12 11:21
回复 4# 风之语故乡
噢,我忘了,在 set /a 中直接引用变量名时,只有值为合法数字的变量才会被解释,否则一律当成 0
作者: Hello123World 时间: 2011-8-12 15:24
话说回去,set /a s=%t%+1才对,
但是Set /a s=t+1也得到了正确的计算结果。
也许在Set /a中变量的引用就不需要加%%了,跟defined 一样。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |