2016-11-10 43 views
2

下面的代码应该执行除法计算。它应该要求用户输入第一个号码,等待输入,然后重复第二个号码。用户按下输入后批处理文件关闭

(一些额外的信息:用户是不允许进入22号或0)

到目前为止,您输入第一个号码后离开了我。我不知道为什么。

任何帮助,将不胜感激!

@echo off 
cls 

:START 
set /p FN = Enter first number: 
if %FN% == 22 GOTO EXIT 
GOTO SECONDNUMBER 


:EXIT 
exit /b 

:SECONDNUMBER 
set /p SN = Enter second number: 
if "%SN%" == 22 exit /b 
if "%SN%" == 0 GOTO ZEROERROR 

GOTO DIVIDE 


:ZEROERROR 
echo Sorry! You CAN NOT divide by ZERO. Please enter a new number. 
pause 
cls 
GOTO SECONDNUMBER 

:DIVIDE 
set /a RESULT = %FN%/%SN% 
echo %FN% divided by %SN% = %RESULT% 
pause 
cls 
GOTO START 
+1

'set/p SN = ...'设置一个名为'SN' + _space_的变量。 '如果“%SN%”== 22“将带引号的字符串与未加引号的字符串进行比较,并且因此总是失败(引号是比较的一部分)。为了解决这个问题,引用正确的部分('“22”');引用的语法对空字符串是强健的,但没有引用的语法不是。 – aschipfl

+1

我想我们本周每天都会回答这个问题。与延迟扩展相同。可能是人们无法理解的批处理文件中最常见的两个错误。 – Squashman

回答

2

你可以尝试这样的事情:

@echo off 
Title Division Computation 
:START 
cls 
Color 0A 
set /p "FN=Enter first number : " 
if "%FN%" EQU "22" Exit 
::******************************* 
:SECONDNUMBER 
Color 0A 
set /p "SN=Enter second number : " 
if "%SN%" EQU "22" Exit 
if "%SN%" EQU "0" GOTO ZEROERROR 
GOTO DIVIDE 
::******************************* 
:DIVIDE 
set /a RESULT=%FN%/%SN% 
echo %FN% divided by %SN% = %RESULT% 
pause 
cls 
GOTO START 
::******************************* 
:ZEROERROR 
Color 0C 
echo Sorry! You CAN NOT divide by ZERO. Please enter a new number. 
pause 
cls 
GOTO SECONDNUMBER 
::******************************* 

这是一个奖金计算器用打字机和我说话的声音你只是为了好玩:)

@echo off 
Title Calculator with a TypeWriter and Speaking Voice by Hackoo 2016 
Color 0A & Mode con cols=80 lines=3 
Call :TypeWriter "Hello, Welcome to my calculator. First off would you like to tell me your name ? " 
echo(
Call :TypeWriter "So, Whats your name ? " 
set /p name= 
Call :TypeWriter "Ah, Nice to meet you %name% !" 
::************************************************************* 
:start 
Call :TypeWriter "What is the first number you want to use ? " 
set /p no= 
Call :TypeWriter "What Operation do you want to use ? " 
set /p op= 
Call :TypeWriter "What is the second number you would like to use ? " 
set /p no2= 
Call :TypeWriter "%no% %op% %no2% " 
set /a ans=%no% %op% %no2% 
Call :TypeWriter " Well, That was an easy one the answer is %no% %op% %no2% = %ans% " 
Call :TypeWriter " Would you like to do another calculaton ? Y(Yes) or N(No) ?" 
set /p Question= 
If /I "%Question%"=="Y" (goto :start) else (Goto :end) 
::************************************************************* 
:TypeWriter 
Cls 
echo(
(
echo strText=wscript.arguments(0^) 
echo intTextLen = Len(strText^) 
echo intPause = 150 
echo For x = 1 to intTextLen 
echo  strTempText = Mid(strText,x,1^) 
echo  WScript.StdOut.Write strTempText 
echo  WScript.Sleep intPause 
echo Next 
echo Set Voice=CreateObject("SAPI.SpVoice"^) 
echo voice.speak strText 
)>%tmp%\%~n0.vbs 
@cscript.EXE /noLogo "%tmp%\%~n0.vbs" "%~1" 
exit /b 
::************************************************************** 
:end 
Exit 
::************************************************************* 
+1

谢谢!你让我意识到问题是我在'='符号之间有空格。一旦我删除它们,一切正常! – user1017524

相关问题