首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么批处理文件中的IF条件解释3大于2*2?

为什么批处理文件中的IF条件解释3大于2*2?
EN

Stack Overflow用户
提问于 2016-11-17 23:05:00
回答 1查看 54关注 0票数 2

我试图为我正在制作的一个小游戏建立一个无限的平衡系统,但是它不起作用。这就是看起来的样子。

代码语言:javascript
复制
if %exp% gtr %lvl%*%lvl% goto lvlup
:lvlup
set /a exp=%exp%-%lvl%*%lvl%
set /a cmhealth=%cmhealth%+5
set /a cchealth=%cchealth%+5
set /a cattack=%cattack%+3
set /a cDefence=%cDefence%+4
set /a cspeed=%cspeed%+2
set /a lvl=%lvl%+1
set /a SP=%SP%+1
goto decisions

它运行良好,直到达到以下目的:

代码语言:javascript
复制
if 3 GTR 2*2 goto lvlup
set /a exp=3-2*2
set /a cmhealth=25+5
set /a cchealth=18+5
set /a cattack=8+3
set /a cDefence=15+4
set /a cspeed=8+2
set /a lvl=2+1
set /a SP=1+1
goto decisions

然后将exp设置为-1

它为什么要这样做,我怎样才能解决它?

问题是它没有将2*2读为4或3*3读为9。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-18 07:41:10

IF命令比较主字符串。

如果两个字符串可以在内部成功转换为32位有符号整数,则(如果也比较整数),则默认启用命令扩展名,并将其用作比较运算符EQUNEQLSSLEQGTRGEQ

但是,如果不计算像命令这样的表达式,则使用参数/A设置

在命令提示符窗口if /?中运行此命令的帮助。

由于字符串2*2由于字符串中的*而不能转换为整数,因此命令 if 运行字符串比较来计算左字符串是否大于右字符串。

字符串比较是通过逐字节比较两个字符串的字节来完成的,直到到达两个字符串的任一端,或者两个字符串的当前比较字节不相等为止。

这两个字符串的字节的十进制值是:

  • 3……51
  • 2*2 . 50 42 50

51大于50,因此字符串3大于字符串2*2,批处理执行继续跳转到标签lvlup

因此,首先需要用%lvl%*%lvl%计算表达式set /A,然后将结果赋值给一个环境变量,然后再与另一个包含整数的环境变量进行比较。

代码语言:javascript
复制
set /A result=lvl * lvl
if %exp% GTR %result% goto lvlup

:lvlup
set /A exp-=result
set /A cmhealth+=5
set /A cchealth+=5
set /A cattack+=3
set /A cDefence+=4
set /A cspeed+=2
set /A lvl+=1
set /A SP+=1
goto decisions

正如命令通过在命令提示符窗口中运行来设置输出一样,set /?解释说,在set /A之后的表达式中的变量名通常不能也不应该通过使用%VariableName% (立即展开)或!VariableName! (延迟扩展)来引用。分隔空格的字符串(肯定不是整数或算术表达式中的运算符)将自动解释为变量名,当前字符串值应在内部转换为32位有符号整数,以求算术表达式。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40666649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档