以下代码的输出重复“不平衡括号”x100。如果我取出括号并离开%% i%5,它只是循环数字1-100而没有mod。如果我添加或减去它,它工作正常。为什么不能找到mod,特别是?
:MAIN
setlocal EnableDelayedExpansion
set result=0
for /L %%i in (1,1,100) do (
set /a result= (%%i%5)
echo !result!
)
endlocal
我有其他一些代码,但我似乎无法找到问题。如果输入非零数字,它就可以正常工作。
@echo off
:MAIN
set /p number1= "Enter 1st number:”
if %number1%== "9" goto second_num
:second_num
set /p number2= “Enter 2nd number:”
if %number2%== “0” goto error
if %number2%== "9" goto division
:division
set /a result= (%number1%/%number2%)
echo %result%
pause
exit
:error
echo "Error. Cannot divide by 0. Start over."
goto MAIN
但如果第二个数字是0,那么它的输出是:
Divide by zero error.
ECHO is off.
Press any key to continue...
当我按下一个键时,程序结束而不是去:错误。我意识到if语句有问题。为什么说ECHO已关闭?有人可以指出我正确的方向吗?
答案 0 :(得分:5)
set /a result= (%%i%5)
是你的问题。 FOR看作右括号为其右括号,因此SET具有不平衡的括号。
将)
中的SET
更改为^)
- 插入符号(^
)转义)
告诉处理者它是set
的一部分1}},而不是for
当你接触它时,%5
应该是%%5
,因为奇怪,%
逃脱%
,而不是^
并且处理器需要告诉我%
不是%5
的一部分 - 批处理文件的第五个参数。
下一个问题是由于不了解环境变量总是一个字符串。唯一需要引用的时间是它可能包含某些字符,如SPACES。语句if %var%==7
正在将字符串contents of var
与字符串7
进行比较,因此您的语句将the contents of the variable
与"9"
(或其他)进行比较。这些从不将是平等的。现在 - "%number2%"
可能相等,因为两个实际的STRINGS可能相等。
如果ECHO
没有任何内容作为其“参数”,那么它会报告其状态,即ON或OFF。由于尝试除以0的错误,SInce RESULT
未设置,语句归结为ECHO
,因此适当报告回声状态。
治愈方法是尝试ECHO.
- 点会给ECHO
一些东西咀嚼而且会产生一个空行,因为%result%设置为[nothing]