代码之家  ›  专栏  ›  技术社区  ›  user6074447

混淆“for/l in%%i…”始终呈现“0”

  •  0
  • user6074447  · 技术社区  · 8 年前

    我有点困惑,为什么在这段代码中,%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 回复  |  直到 8 年前
        1
  •  1
  •   Wes Larson    8 年前

    本节有两个问题:

    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 行最后只检查最后一次计算的结果。您需要启用延迟扩展,然后包括 如果 中的语句 对于 循环,如下所示:

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