脚本提示用户选择要执行的计算(调用)。在我选择一个选项并计算数字后,我得到随机结果。例如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,但我仍然得到随机结果。
感谢您的任何建议。
答案 0 :(得分:0)
set FNUM1=4
set FNUM2=4
set /a RESULT=%FNUM1%*%FNUM2%
echo RESULT: %RESULT%
结果:16
set /a "RESULT = FNUM1 * FNUM2"
echo RESULT: %RESULT%
结果:16
答案 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 "