2017-06-01 8 views
1

スクリプトは、実行する呼び出し(呼び出し)を選択するようにユーザーに求めます。オプションを選択して数値を計算すると、ランダムな結果が得られます。例えば、4 + 5 = 27と4 * 4 = 0私はFNUM1とFNUM2を設定するための "/" を使用してみましたが、私はまだランダムな結果を得るBATCHスクリプトで数学関数を呼び出していますが、結果の乱数を取得しようとしています

@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 

ありがとうございました。

+0

最初に行うことは、何が起きているかを見るために' @echo off'を削除することです。 –

答えて

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

+0

ここで何を言おうとしていますか? – SomethingDark

+0

「FNUM1とFNUM2を定義している場合、FNUMとFNUM2で操作するのは意味がありません」 – Stephan

+0

この例では構文が間違っていました。上記は彼が代わりに使うことができる2つのオプションです。 –

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に置き換えられるため、ブロック内のnum?を変更しても、サブルーチンに渡される値は変更されません - num?ブロックの実行がになったときです。

改造は:実行する前choiceを設定するだけでが押されたを入力した場合、変数はが、そのまま

確立し、新たな変数、operationとセットになっていないだろうset/pので、それに何もない

(おそらく試してみてくださいchoice /?)をoperationに設定してください。

各エントリが(ほぼ)同じテキストを生成したので、値を入力してから計算を実行します。

おそらくあなたは、各サブルーチンで

echo %1 ? %2=%result% 

のようなものを置きたいことがあり、ORにサブルーチンを選択した(call :%operation%...後、など+-にメインルーチンにサブルーチン内operationを変更します実行)してみてください

エコー%NUM1%%操作%%からnum2%=%結果%

ルーチンによって設定されるようにoperationに記入すべき」 :oldvalueofoperation "

+0

まず、自分のコードに間違いがありました。自分の機能にFNUM1の代わりにFNUMだけがありました。 第2に、私はaccess_grantedの提案を使用しました。 "set/a" RESULT = FNUM1 * FNUM2 " 最後に、あなたのメソッドを":main "に使用しました。 スクリプトが正しく機能するには、 –

関連する問題