If statement 批处理随机数生成器-生成与以前相同的数
基本上,我的代码继续生成相同的数字。我已经关闭了echo以查看问题,实际的%random%变量正在更改,但它似乎进行了计算,并说“不,实际上是这个数字。”下面是代码:If statement 批处理随机数生成器-生成与以前相同的数,if-statement,random,batch-file,If Statement,Random,Batch File,基本上,我的代码继续生成相同的数字。我已经关闭了echo以查看问题,实际的%random%变量正在更改,但它似乎进行了计算,并说“不,实际上是这个数字。”下面是代码: set /a num=(24 * %random%) / 32768 + 1 我已经测试了代码本身,它工作得很好。然而,当我将if语句*添加到代码中时,一切都会发生变化。所以,问题是,我如何解决这个问题,为什么会发生这种情况 *我的if声明: if "%num%"=="24" ( echo X set /p ans=
set /a num=(24 * %random%) / 32768 + 1
我已经测试了代码本身,它工作得很好。然而,当我将if语句*添加到代码中时,一切都会发生变化。所以,问题是,我如何解决这个问题,为什么会发生这种情况
*我的if声明:
if "%num%"=="24" (
echo X
set /p ans=
if "%ans%"=="litin" (
echo.
echo Correct!
pause>nul
goto generate
)
)
我所有的if语句都是这样的。听起来您可能对变量扩展有问题。假设你在循环中做这些事情 尝试在程序顶部添加
setlocal
,如下所示:
setlocal ENABLEDELAYEDEXPANSION
和程序结束时的endlocal
:
endlocal
现在,当您需要使用循环中正在更改的变量时,请使用代码>语法而不是%
:
if "!num!"=="24" (
echo X
set /p ans=
if "!ans!"=="litin" (
echo.
echo Correct!
pause>nul
goto generate
)
)
听起来您可能对变量扩展有问题。假设你在循环中做这些事情
尝试在程序顶部添加setlocal
,如下所示:
setlocal ENABLEDELAYEDEXPANSION
和程序结束时的endlocal
:
endlocal
现在,当您需要使用循环中正在更改的变量时,请使用代码>语法而不是%
:
if "!num!"=="24" (
echo X
set /p ans=
if "!ans!"=="litin" (
echo.
echo Correct!
pause>nul
goto generate
)
)
您可能需要使用eq
来比较数字。所以试试这个
if "%num%" EQU 24 (
...
)
您可能需要使用eq
来比较数字。所以试试这个
if "%num%" EQU 24 (
...
)
启用延迟扩展时,必须转义代码>文字:echo Correct^代码>。不仅仅是环路需要延迟扩展。连接的命令或括号内的多个命令(如IF语句中的命令)也有相同的问题。启用延迟扩展时,必须转义代码>文字:echo Correct^代码>。不仅仅是环路需要延迟扩展。串联命令或括号内的多个命令(如IF语句中的命令)也有相同的问题。