@echo off
pause
set /a x=1
set /a n=0
set /p x_end=x (End)=
:loop
cls
set /a n=n+1
set /a x=x+n+1
set /a students=n+2
echo x=%x%, n=%n%, x (End)=%x_end%
if (%x%=%x_end% goto end)
goto loop
:end
echo Answer: x (End)=%x%, Students=%students%, n (end)=%n%
echo.
echo Click Anything To Exit...
pause > nul
exit
“if”行生成一条消息,提示您在 %x_end% 变量中输入的内容“这次是意外的”。
答案1
@echo off
rem pause
set /a x=1
set /a n=0
set /p x_end=x ^(End^)=
rem ensure %x_end% will result to a number
set /a "x_end=x_end"
:loop
echo cls
set /a n=n+1
set /a x=x+n+1
set /a students=n+2
echo x=%x%, n=%n%, x ^(End^)=%x_end%
rem pause >nul
if %x% GTR %x_end% goto end
goto loop
:end
echo Answer: x ^(End^)=%x%, Students=%students%, n ^(end^)=%n%
echo(
echo Click Anything To Exit...
pause > nul
rem exit
上面的代码片段还有以下改进:
- 仅用于调试目的
- 一些
rem
(初始pause
,最终exit
); echo cls
代替cls
;
- 一些
- 重要的
set /a "x_end=x_end"
确保%x_end%
无论用户输入什么,都会得到一个数字;if
有效语法:使用GTR
(>,大于)或GEQ
(>=,大于或等于);- 因为批处理脚本中括号的特殊含义,所有开
(
合)
都是逃脱在所有应该按字面意思使用的情况下(echo
和set /p
)。尝试if 1==1 (echo (inner) parentheses)
将表明这可能很重要。虽然这在给定代码片段,作为一般原则而言,这是值得的。