下面是我试图做的简单计算器批次,但是在设置/无法完成工作。什么问题和我的错误?
@echo off
Title Calculator
:start
echo Press 1 for "+"
echo Press 2 for Exit
echo.
set /p input="Please choose your option: "
if %input%==1 (
echo.
set /p num1="Please enter first number: "
set /p num2="Please enter second number: "
set /a ans=%num1%+%num2%
echo Your answer is %ans%
pause
cls
goto start
)
if %input%==2 (
echo.
echo Thanks!
pause
exit
) else echo Invalid input!
pause
goto start
当我第一次运行批处理时,将返回Missing操作数。当我再次继续时,错误消失而没有给我答案,当我第三次继续时,它返回我想要加上的数字的答案。
例如: 1. 10 + 10结果是缺少操作数 2. 1 + 1结果为空 3. 2 + 2结果是20(这是我第一次输入的2个数字)
请帮助我的错误。感谢。
答案 0 :(得分:1)
以下是rojo明智建议使用延迟扩展和缩进的批处理代码:
@echo off
title Calculator
setlocal EnableExtensions EnableDelayedExpansion
:Begin
echo Press 1 for "+"
echo Press 2 for Exit
echo/
set "input="
set /P "input=Please choose your option: "
if "!input!"=="1" (
echo/
set /P "num1=Please enter first number: "
set /P "num2=Please enter second number: "
set /A ans=num1+num2
echo Your answer is !ans!
pause
cls
goto Begin
)
if "!input!"=="2" (
echo/
echo Thanks^^!
echo/
pause
exit /B
)
echo Invalid input^^!
echo/
pause
echo/
goto Begin
在询问用户之前始终清除变量input
,否则用户只需按 RETURN 或 ENTER 键即可保持变量{{1}的当前值}}
延迟扩展用于检查针对input
或1
的用户输入,以防用户输入字符,这会导致执行时出现语法错误但未使用延迟扩展。不过,对于第一个用户提示,最好使用命令2
。
对于使用choice
在运行时计算的表达式,可以直接指定环境变量而不进行扩展。所以不要使用
set /A
或
set /A ans=%num1%+%num2%
写
就足够了set /A ans=!num1!+!num2!
因为使用参数set /A ans=num1+num2
命令/A
会自动将set
和num1
解释为变量名称。
然后需要延迟扩展来打印存储在变量num2
中的结果值,因为命令处理器在解析以{{1}开头的整个块时分别向前扩展ans
并以%ans%
结尾。从命令提示符窗口中运行批处理文件时可以看到这一点,第一行更改为(
以进行调试。
有关详细信息,请在命令提示符窗口)
或@echo on
中运行,并阅读输出帮助页面。
start 是命令的名称。因此,尽管可能,但使用这个词作为标签的名称并不好。
顺便说一下:始终使用set /?
而不是help set
因为这会产生很大的不同,请参阅