我在.bat中设计了一个简单的程序(顺便说一句,与DOS相同的是.bat吗?)会让用户猜测二次方的X值,然后我遇到了一个问题,即丢失了操作数错误,如下面代码中的注释所示。
@echo off
setlocal enabledelayedexpansion
:top
set /p q=Take a guess:
if %q% equ 67 (
echo YOU GOT IT! CONGRATULATIONS! The equation was "Y=17*[X-67]*[X-67]+166"
pause
EXIT
)
if NOT %q% equ 67 (
echo try again.
::The problem is definitely in the line below this one.
set /a r=17*(%q%-67)*(%q%-67)+189
echo The resulting Y value is %r%
pause
goto top
)
我应该更改什么,以便程序将正确的值存储到r?
答案 0 :(得分:2)
嗯,从逻辑上来说,要达到if not %q% equ 67
语句,q必须不是-67;但修复这个小缺陷会掩盖这个问题。
你有if-not-67声明
if NOT %q% equ 67 (
...
... bad idea to use ::-comments within a block...
set /a r=17*(%q%-67)*(%q%-67)+189
...
...
...
)
问题是)
语句中的第一个set
正在关闭if not ...(
您需要在)
中转义set
^)
每个r
您的nxt问题将是因为您在阻止[{1}}到if not .. 67 (
之内设置了goto top )
,因此您无法使用{{1}访问其更改后的值但必须使用%r%
- 您可以方便地使用!r!
嗯 - 实际上,您可以使用
enabledelayedexpansion
但更容易使用
call echo The resulting Y value is %%r%%
答案 1 :(得分:0)
本作品:
@echo off
title written by XLR8 from http://sd-storage.weebly.com
:top
set /p q=Take A Guess
if %q%==67 goto correct
goto incorrect
:correct
echo YOU GOT IT! CONGRATULATIONS! The equation was "Y=17*[X-67]*[X-67]+166"
Echo Press Any Key To Exit
pause >nul
EXIT
:incorrect
echo try again.
goto top
set r=17*(%q%-67)*(%q%-67)+189
echo The resulting Y value is %r%
echo Press Any Key To Start Again
pause >nul
goto top