尝试在BATCH脚本中调用数学函数,但获取结果的随机数

时间:2017-06-01 01:33:52

标签: windows batch-file cmd

脚本提示用户选择要执行的计算(调用)。在我选择一个选项并计算数字后,我得到随机结果。例如4 + 5 = 27和4 * 4 = 0。

@echo off
goto :main

:addition
    set /a FNUM1=%~1
    set /a FNUM2=%~2
    set /a RESULT=FNUM + FNUM2
    echo RESULT: %RESULT%
goto :eof

:subtraction
    set /a FNUM1=%~1
    set /a FNUM2=%~2
    set /a RESULT=FNUM - FNUM2
    echo RESULT: %RESULT%
goto :eof

:multiplication
    set /a FNUM1=%~1
    set /a FNUM2=%~2
    set /a RESULT=FNUM * FNUM2
    echo RESULT: %RESULT%
goto :eof

:division
    set /a FNUM1=%~1
    set /a FNUM2=%~2
    set /a RESULT=FNUM / FNUM2
    echo RESULT: %RESULT%
goto :eof

:main
    echo Welcome to the calculator
    echo Please chose one of the following options:
    echo    1 - Addition
    echo    2 - Subtraction
    echo    3 - Multiplication
    echo    4 - Division
    echo    5 - Quit

    set /p CHOICE=
    if "%CHOICE%"=="1" (
        echo YOU CHOSE ADDITION!
        echo Enter first number:
        set /p NUM1=
        echo Added by:
        set /p NUM2=
        call :addition %NUM1% %NUM2%
    )

    if "%CHOICE%"=="2" (
        echo YOU CHOSE SUBTRACTION!
        echo Enter first number:
        set /p NUM1=
        echo Subtracted by:
        set /p NUM2=
        call :subtraction %NUM1% %NUM2%
    )


    if "%CHOICE%"=="3" (
        echo YOU CHOSE MULTIPLICATION!
        echo Enter first number:
        set /p NUM1=
        echo Multiplied by:
        set /p NUM2=
        call :multiplication %NUM1% %NUM2%
    )

    if "%CHOICE%"=="4" (
        echo YOU CHOSE DIVISION!
        echo Enter first number:
        set /p NUM1=
        echo Divided by:
        set /p NUM2=
        call :division %NUM1% %NUM2%
    )

    if "%CHOICE%"=="5" (
        echo Good Bye!
    )
goto :eof

我尝试使用“/ a”来设置FNUM1和FNUM2,但我仍然得到随机结果。

感谢您的任何建议。

2 个答案:

答案 0 :(得分:0)

set FNUM1=4
set FNUM2=4

set /a RESULT=%FNUM1%*%FNUM2%
echo RESULT: %RESULT%

结果:1​​6

set /a "RESULT = FNUM1 * FNUM2"
echo RESULT: %RESULT%

结果:1​​6

答案 1 :(得分:0)

:main
echo Welcome to the calculator
echo Please chose one of the following options:
echo    1 - Addition
echo    2 - Subtraction
echo    3 - Multiplication
echo    4 - Division
echo    5 - Quit

set "operation="
set "choice="
set /p CHOICE=
if "%CHOICE%"=="1" set "operation=ADDITION"
if "%CHOICE%"=="2" set "operation=SUBTRACTION"
if "%CHOICE%"=="3" set "operation=MULTIPLICATION"
if "%CHOICE%"=="4" set "operation=DIVISION"
if "%CHOICE%"=="5" (
    echo Good Bye!
)
if not defined operation echo illegal choice&goto main

echo YOU CHOSE %operation%!
echo Enter first number:
set /p NUM1=
echo Second number:
set /p NUM2=
call :%operation% %NUM1% %NUM2%
goto main
goto :eof

您的主要问题可以通过阅读有关delayed expansion的一些SO项目来解释。简而言之,在一个块(带括号的系列行)中,任何%var%在遇到块时被var的值替换,因此更改块内的num?不会改变传递给子例程的值 - 它是块{em>的执行开始时的num?

Mods:在执行choice之前将set/p设置为 nothing ,因为如果只按 Enter ,变量将不会变为,但未更改

建立一个新变量operation并将其设置为 nothing

取决于所做出的选择(也许您应该从提示中尝试choice /?以获得更好的方法)将operation设置为适当的值。

由于每个条目产生(几乎)相同的文本,请输入值,然后执行计算。

也许你可能想要像

这样的东西
echo %1 ? %2=%result%

在每个子例程中,或者将子例程中的operation更改为+-等,并在主例程中,在call :%operation%...之后(选择子例程)试试)

echo%num1 %% operation %% num2%=%result%

应填写operation按例程设置": oldvalueofoperation "