3

次のコードは機能しません。何を入力してもエラーが返され、その後 に戻りますRetry

@echo off

:maths
set /p Mathsa="first number? "
echo your first number is %Mathsa%

:retry

set /p Mathso="operator?(+-*/) "
if "%Mathso%" ==* GOTO run
if "%Mathso%" ==/ GOTO run
if "%Mathso%" ==+ GOTO run
if "%Mathso%" ==- GOTO run
echo Error, wrong operator. & goto retry

:run
set /p Mathsb="Second Number? "
set /a Mathsans=%Mathsa%%Mathsp%%Mathsb%
echo %Mathsans%
pause

なぜこれを行っているのか、私にはまったくわかりません。これは学校のプロジェクトのためのものであり、あなたが与えることができるどんな助けも大歓迎です!

4

1 に答える 1

5

Mathso変数を囲む引用符です。次のように、等式の両側を引用符で囲むようにすべてを変更します。

if "%Mathso%" == "+" GOTO run

そして、それらはより良く機能するはずです。

これは、cmdUNIX シェルとまったく同じではないためです。引用符は等式の左側に保持されるため、最終的には次のようになります。

if "+" == + then ...

"+"は等しくありません+

両側に引用符を付けると、次のようになります。

if "+" == "+" then ...

これ本当です。


そして、Aacini がコメントで指摘しているように、計算setでは演算子に間違った変数が使用されています。変更する必要があります:

set /a Mathsans=%Mathsa%%Mathsp%%Mathsb%

の中へ:

set /a Mathsans=%Mathsa%%Mathso%%Mathsb%
                              ^
                              |
                              see here
于 2013-01-08T03:56:12.543 に答える