Board logo

标题: [已解决]批处理set语句/a参数使用计算错误 [打印本页]

作者: er8852973    时间: 2011-8-12 10:45     标题: [已解决]批处理set语句/a参数使用计算错误

  1. set /p t=
  2. set /a s=t+1
  3. echo %s%
  4. 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