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

他们应该工作得更好。

原因是它cmd与 UNIXy shell 不太一样。引号保留在等式的左侧,因此您最终得到的是:

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 回答