关于“for / l in %% i ...”的混淆总是呈现“0”

时间:2016-03-17 01:07:53

标签: windows batch-file cmd primes

我有点困惑为什么在这段代码中,%rem%总是回到0(即使用素数进行测试)。有人可以帮帮我吗?谢谢:D

:PRIME
cls
echo What number would you like to check?
set /p num=
set num2=%num%-1
for /l %%i in (2 1 %num2%) do (
    set /a rem=%num% %% %%i
)
if %rem% equ 0 goto NOT_PRIME
goto YES_PRIME

:YES_PRIME
echo %num% is a prime number.
goto AGAIN_PRIME

:NOT_PRIME
echo %num% is not a prime number.
goto AGAIN_PRIME

:AGAIN_PRIME
echo Would you like to check another number? (y/n)
set /p ans=
if '%ans%'=='y' goto PRIME
if '%ans%'=='n' goto START

这只是代码的一部分。问题是我测试的每个数字,我得到“%num%不是素数。”

1 个答案:

答案 0 :(得分:1)

本节有两个问题:

set num2=%num%-1
for /l %%i in (2 1 %num2%) do (
    set /a rem=%num% %% %%i
)
if %rem% equ 0 goto NOT_PRIME

首先,您需要使用set /a对变量进行计算,因此它应该是:

set /a num2=%num%-1

其次,您的for循环会正确运行所有计算,但您的if行最终只会检查最后一次计算的结果。您需要启用延迟扩展,然后在if循环中包含for语句,如下所示:

for /l %%i in (2 1 %num2%) do (
    set /a rem=%num% %% %%i
    if !rem! equ 0 goto NOT_PRIME
)