2016-11-10 40 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

相關問題