1

私はバッチコードで問題を抱えていましたが、うまくいきませんでした...

以下は私が書いたものです...

@echo off
cls

:loop
set /p "input=Input a number: "
set /a "number=%input%" 2>nul
REM check if input valid
if "%input%" NEQ "%number%" (
cls
Echo Please Enter a valid number! &Echo.&Echo.
goto :loop
)
Set /a Even=number%%2
if %Even% EQU 0 (
Echo Substituting Even Number in: x / 2
Echo set /p"=(%number%) / 2 = "
set /a answer=number/2
) Else (
Echo Substituting Odd Number in: 3x - 1
<nul set /p"=3(%number%)-1 = "
set /a answer=number*3
set /a answer=answer-1
)
Echo %answer%
Echo.
Echo.

goto :loop
Echo Unexpected Error . . .
pause
Exit

コンソールに数値を入力すると、希望どおりに計算されますが、数値-1が出力され、別の数値を入力するたびに、数値は-2、-3、-4などになります。 .

4

1 に答える 1

1

の後にasetlocal enableextensionsを先頭に置きます。@echo off

@echo off
setlocal enableextensions
cls

!var!また、上記のスクリプトを次のように変更する遅延変数展開 (通常は で示される) も使用する必要があると思います。

@echo off
setlocal enableextensions enabledelayedexpansion
cls

:loop
set /p "input=Input a number: "
set /a number=!input! 2>nul
REM check if input valid
if "!input!" NEQ "!number!" (
cls
Echo Please Enter a valid number!
Echo.
Echo.
goto :loop
)
REM Make sure that it is an integer put in (just in case)
set /a int=!number! %% 1
if "!input!" NEQ "!int!" (
cls
Echo Please Enter a valid number!
Echo.
Echo.
goto :loop
)
Set /a Even=!number! %% 2
if !Even! EQU 0 (
Echo Substituting Even Number in: x / 2
set /a answer=!number! / 2
) Else (
Echo Substituting Odd Number in: 3x - 1
set /a answer=!number! * 3 - 1
)
Echo !answer!
Echo.
Echo.

goto :loop

また、他のいくつかのバグも修正したことを指摘したいと思いset /pます(このスクリプトでは、特に使用されている場所ではまったく役に立ちません。また、偶数/奇数を見つけるにはモジュラスが必要です)。

于 2013-11-14T23:19:19.537 に答える